3

可能的重复:
Python 生成器与迭代器之间的区别

生成器在 Python 中似乎很重要,不时向它们添加新功能等等。

据我所见,您总是可以使用带有迭代器接口的对象来代替生成器。(通常)更好的简洁性是生成器的唯一好处还是我错过了什么?

4

2 回答 2

13

是的,迭代器是一种更通用的构造,你可以用生成器做的任何事情都可以用迭代器来完成。

然而,生成器是非常好的工具,可以以非常简洁的方式表达某些想法,迭代器会变得很麻烦。

例如,这是一个简单的函数:

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 的许多哲学都是基于可读性和简单性。与此一致,我认为生成器为需要迭代器的广泛任务提供了更好的接口。是的,迭代器更强大,但生成器的语法优势当然不容忽视。

于 2012-10-07T06:29:17.260 回答
3

迭代器和生成器之间的区别在于生成器执行惰性求值,它按需生成值,迭代器在每次迭代时求值并将它们存储在内存中。生成器更适合大型循环,因为它们一次只“保存”一个值。

于 2012-10-07T06:36:41.623 回答