【发布时间】:2018-05-24 15:27:13
【问题描述】:
我是Python 的新手。我能够理解Iterables 和Iterators。
但是我看到有很多东西可以比较 Generators 和 Iterators。
据了解,Iterable 是一个对象,其中实际上存储了元素(例如列表)。他们遵循一个迭代协议,在该协议中他们实现了__iter__() 方法,该方法返回一个Iterator 对象,该对象有助于迭代Iterable。
据我了解,Generators 有助于动态生成数据,而不是在内存中创建大数据结构并返回它。我们也可以通过使用Iterators 来实现类似的目标。
现在我怀疑,如果我们已经拥有Iterators,那么Generators 的需要是什么,因为两者都有助于实现动态生成数据的类似目标。
这只是为了简化语法还是有任何其他原因导致Generators 存在?
【问题讨论】:
-
生成器是迭代器,它们只是使用
yield语法的迭代器的简化版本,但它们的功能较少。这篇文章涵盖了您需要知道的所有内容,可能是骗子:stackoverflow.com/q/2776829/6622817 -
从技术上讲,生成器是一个迭代器,基本上,它是一种以紧凑的方式定义迭代器协议的方法。经典迭代器将使用具有
__iter__和__next__方法的类来定义,使用生成器,您只需使用带有 yield 语句或生成器表达式的函数即可完成此操作。 -
所以生成器的存在只是为了简化语法还是有其他原因?
-
我认为链接问题中的Aaron Hall♦'s answer 很好地涵盖了所有内容。
标签: python python-3.x python-2.7 iterator generator