与迭代器相比,生成器有什么好处?

Aiv*_*var 0 python generator

可能重复:
Python生成器与迭代器之间的差异

生成器在Python中看起来很重要,偶尔会向它们添加新功能,依此类推.

据我所知,相反,生成器可以始终使用带有迭代器接口的对象.(通常)更简洁是发电机的唯一好处还是我错过了什么?

nne*_*neo 9

是的,迭代器是一个更通用的构造,你可以使用迭代器完成任何你可以用生成器做的事情.

但是,生成器是一种非常好的工具,可以非常简洁明了地表达某些想法,迭代器会变得很麻烦.

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

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的理念都是基于可读性和简单性.为了与此保持一致,我觉得生成器为广泛的任务提供了一个更好的界面,否则需要迭代器.是的,迭代器更强大,但生成器的语法优势当然不容忽视.