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

  • 问题:
  • 迭代器和生成器有什么区别?举几个例子来说明你什么时候会用到每种情况

  • 答案:
  • 迭代器(iterator)是一个更一般的概念:其类具有next方法(Python3中的next\)和返回self的方法的任何对象

    每个生成器都是迭代器,但不是相反。生成器是通过调用具有一个或多个yield表达式(Python2.5及更早版本中的yield语句)的函数来构建的,它是一个满足上一段关于迭代器的定义的对象

    当您需要一个具有某种复杂的状态维护行为的类,或者希望公开除next之外的其他方法(以及。大多数情况下,生成器(有时,对于足够简单的需求,生成器表达式)就足够了,而且编写代码也更简单,因为状态维护(在合理的限制内)基本上是通过帧挂起和恢复来“为您完成”的

    例如,发电机,例如:

    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)

    但是,当然,使用classSquares您可以轻松地提供额外的方法,即

        def current(self):
    return self.start

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