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

回到顶部