Python的生成器和迭代器之间的区别
迭代器和生成器有什么区别?有关何时使用每种情况的一些示例会有所帮助。
回答:
iterator
是一个更笼统的概念:其类具有next方法(__next__
在Python 3中)和具有__iter__
方法的任何对象return self
。
每个生成器都是一个迭代器,但反之亦然。生成器是通过调用具有一个或多个yield表达式(yield在Python 2.5及更早版本中为语句)的函数而构建的,并且该函数是满足上一段对的定义的对象iterator
。
当你需要一个具有某些复杂的状态维护行为的类时,或者想要暴露除next
(和__iter__
和__init__
)之外的其他方法时,你可能想使用自定义迭代器,而不是生成器。通常,一个生成器(有时,对于足够简单的需求,一个生成器表达式)就足够了,并且它更容易编写代码,因为状态维护(在合理范围内)基本上是由挂起和恢复帧“为你完成的”。
例如,生成器例如:
def squares(start, stop): for i in range(start, stop):
yield i * i
generator = squares(a, b)
或等效的生成器表达式(genexp)
generator = (i*i for i in range(a, b))
将需要更多代码来构建为自定义迭代器:
class Squares(object): def __init__(self, start, stop):
self.start = start
self.stop = stop
def __iter__(self): return self
def next(self): # __next__ in Python 3
if self.start >= self.stop:
raise StopIteration
current = self.start * self.start
self.start += 1
return current
iterator = Squares(a, b)
但是,当然,有了类,Squares你可以轻松地提供其他方法,即
def current(self): return self.start
如果你对应用程序中的此类额外功能有实际需求。
以上是 Python的生成器和迭代器之间的区别 的全部内容, 来源链接: utcz.com/qa/432337.html