python迭代器是啥意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python迭代器是啥意思相关的知识,希望对你有一定的参考价值。
参考技术A 迭代器(Iterator):迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个迭代器对象必须是定义了__iter__()方法和next()方法的对象。
Python的Iterator对象表示的是一个数据流,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算;Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据
时抛出StopIteration错误;所有的Iterable可迭代对象均可以通过内置函数iter()来转变为迭代器Iterator。__iter__( )方法是让对象可以用
for … in循环遍历时找到数据对象的位置,next( )方法是让对象可以通过next(实例名)访问下一个元素。除了通过内置函数next调用可以
判断是否为迭代器外,还可以通过collection中的Iterator类型判断。如: isinstance(’’, Iterator)可以判断字符串类型是否迭代器。注
意: list、dict、str虽然是Iterable,却不是Iterator。迭代器优点:节约内存(循环过程中,数据不用一次读入,在处理文件对象时特别
有用,因为文件也是迭代器对象)、不依赖索引取值、实现惰性计算(需要时再取值计算)。
python学习网,免费的python学习网站,欢迎在线学习!
Python - 所有内置装饰器是啥? [关闭]
【中文标题】Python - 所有内置装饰器是啥? [关闭]【英文标题】:Python - what are all the built-in decorators? [closed]Python - 所有内置装饰器是什么? [关闭] 【发布时间】:2010-10-03 13:41:56 【问题描述】:我知道@staticmethod
、@classmethod
和@property
,但只是通过分散的文档。 Python 中内置的所有函数装饰器是什么?是在文档中吗?是否在某处维护了最新列表?
【问题讨论】:
没有官方名单,但是这个链接很有用:github.com/lord63/awesome-python-decorator 最著名的是:@staticmethod
、@classmethod
、@property
、@wraps
、@timeit
【参考方案1】:
我不这么认为。装饰器与普通函数没有区别,你只是用一种更花哨的方式来称呼它们。
要找到所有这些,请尝试搜索Built-in functions 列表,因为正如您在Python glossary 中看到的那样,装饰器语法只是语法糖,因为以下两个定义创建了相同的函数(从词汇表中复制了此示例):
def f(...):
...
f = staticmethod(f)
@staticmethod
def f(...):
所以任何返回另一个函数的内置函数都可以用作装饰器。问题是——这样使用它有意义吗? :-)
functools 模块包含一些可用作装饰器的函数,但它们不是您要求的内置函数。
【讨论】:
【参考方案2】:它们不是内置的,但 this library 的示例装饰器非常好。
作为 Abgan says,内置函数列表可能是最好的查看位置。虽然,由于装饰器也可以实现为类,但不能保证它是全面的。
【讨论】:
【参考方案3】:装饰器甚至不需要返回一个函数。我以前用过@atexit.register
。
【讨论】:
嗯,那个返回的函数与传递给它的函数相同。 哦,是吗?我从来没有注意到。 “装饰器甚至不需要返回一个函数”——为了有意义,他们应该这样做,因为@decor
只是f = decor(f)
的糖——否则你会失去引用你正在装饰的函数。
@Dan,你知道@property
不会返回函数,是吗?
@Sasszem,每个函数都会返回 something。如果不出意外,你至少会得到None
。无论哪种方式,都有许多非函数可调用对象。【参考方案4】:
没有所有装饰器的列表。没有所有功能的列表。没有所有类的列表。
装饰器是一种方便的工具,用于定义跨函数、方法或类的公共方面。有内置的装饰器。此外,还有许多很酷且无用的装饰器。同样,有许多很酷且无用的类。
【讨论】:
他的问题是关于内置装饰器的。必须有一个有限(并且可能相对较小)的内置装饰器列表。以上是关于python迭代器是啥意思的主要内容,如果未能解决你的问题,请参考以下文章