可能的重复:
Python 生成器与迭代器之间的区别
生成器在 Python 中似乎很重要,不时向它们添加新功能等等。
据我所见,您总是可以使用带有迭代器接口的对象来代替生成器。(通常)更好的简洁性是生成器的唯一好处还是我错过了什么?
可能的重复:
Python 生成器与迭代器之间的区别
生成器在 Python 中似乎很重要,不时向它们添加新功能等等。
据我所见,您总是可以使用带有迭代器接口的对象来代替生成器。(通常)更好的简洁性是生成器的唯一好处还是我错过了什么?
是的,迭代器是一种更通用的构造,你可以用生成器做的任何事情都可以用迭代器来完成。
然而,生成器是非常好的工具,可以以非常简洁的方式表达某些想法,迭代器会变得很麻烦。
例如,这是一个简单的函数:
def count_to(m):
n = 0
while n <= m:
yield n
n += 1
好,易于。这与迭代器相同:
class CountTo:
def __init__(self, m):
self.m = m
self.n = 0
def __iter__(self):
return self
def next(self):
if self.n <= self.m:
cur, self.n = self.n, self.n + 1
return cur
else:
raise StopIteration()
一个是 5 行,另一个是 12 行。生成器非常简洁地表达了迭代过程,而迭代器用显式维护的状态和样板代码对其进行了混淆。
Python 的许多哲学都是基于可读性和简单性。与此一致,我认为生成器为需要迭代器的广泛任务提供了更好的接口。是的,迭代器更强大,但生成器的语法优势当然不容忽视。
迭代器和生成器之间的区别在于生成器执行惰性求值,它按需生成值,迭代器在每次迭代时求值并将它们存储在内存中。生成器更适合大型循环,因为它们一次只“保存”一个值。