gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:02:34 24 4
gpt4 key购买 nike

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

最佳答案

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

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

当您需要一个具有某种复杂的状态维护行为的类,或者想要公开除 __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 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

如果您对应用程序中的此类额外功能有任何实际需求。

关于python - Python 的生成器和迭代器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2776829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com