可能重复:
Python生成器与迭代器之间的差异
生成器在Python中看起来很重要,偶尔会向它们添加新功能,依此类推.
据我所知,相反,生成器可以始终使用带有迭代器接口的对象.(通常)更简洁是发电机的唯一好处还是我错过了什么?
是的,迭代器是一个更通用的构造,你可以使用迭代器完成任何你可以用生成器做的事情.
但是,生成器是一种非常好的工具,可以非常简洁明了地表达某些想法,迭代器会变得很麻烦.
例如,这是一个简单的函数:
def count_to(m):
n = 0
while n <= m:
yield n
n += 1
Run Code Online (Sandbox Code Playgroud)
好,易于.这与迭代器是一样的:
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()
Run Code Online (Sandbox Code Playgroud)
一个是5行,另一个是12.生成器非常简洁地表示迭代过程,而迭代器使用明确维护的状态和样板代码对其进行模糊处理.
很多Python的理念都是基于可读性和简单性.为了与此保持一致,我觉得生成器为广泛的任务提供了一个更好的界面,否则需要迭代器.是的,迭代器更强大,但生成器的语法优势当然不容忽视.