Python 生成器和迭代器的区别

2023-12-03

迭代器和生成器有什么区别?一些关于何时使用每种情况的示例会很有帮助。


iterator是一个更一般的概念:任何其类具有__next__方法 (next在Python 2)和__iter__的方法return self.

每个生成器都是一个迭代器,但反之则不然。生成器是通过调用具有一个或多个yield表达式(yield语句(在 Python 2.5 及更早版本中),并且是一个满足上一段定义的对象iterator.

当您需要一个具有某种复杂的状态维护行为的类,或者想要公开除此之外的其他方法时,您可能想要使用自定义迭代器,而不是生成器__next__ (and __iter__ and __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 2
       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

如果您的应用程序中确实需要此类额外功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 生成器和迭代器的区别 的相关文章

随机推荐