Python的生成器和迭代器之间的区别

问题:

迭代器和生成器之间有什么区别?当您使用每种情况的一些例子将是有帮助的。

回答:

 iterator是一个更一般的概念:其类具有next方法(Python 3中为__next__)的任何对象和return self__iter__方法
每个生成器都是迭代器,反之亦然。通过调用一个具有一个或多个yield表达式(yield语句,在Python 2.5及更早版本中)的函数来构建生成器,并且是符合前一段定义的iterator的一个对象,
您需要使用自定义迭代器而不是生成器,当您需要具有复杂状态维护行为的类时,或者希望公开除next(和__iter____init__)之外的其他方法。通常情况下,一个发生器(有时候,对于足够简单的需求,一个发生器expression)就足够了,代码更简单,因为状态维护(在合理的限制内)基本上是“为您完成的”,被框架暂停和恢复。
例如,一个发生器,如:

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):
       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

如果您在应用程序中实际需要这样的额外功能。

 
 翻译整理: codewenda.com
英文原文:stackoverflow

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 69 = 76