Python 3:不是生成器的迭代器?
Python 3: Iterator that is NOT a generator?
我想了解迭代器和生成器之间的区别。我读到“每个生成器都是一个迭代器,但反之亦然。”
有人可以举例说明一个对象是迭代器,但不是生成器吗?
我的意思是,如果一个对象有方法next(这是迭代器的定义),我们也可以称它为生成器,不是吗?
UPD:对于那些说发电机必须有 yield 的人 - 并非总是如此。 (i**2 for i in range(1,5)) 没有收益,也是一个生成器。
对于那些说 iter([1,2,3]) 不是生成器的人 - 为什么?它与生成器的哪个定义相矛盾,在哪里?
"Every generator is an iterator, but not vice versa."
我认为这不一定是真的。 Python glossary 给出了 3 个以“generator”开头的条目。
发电机
这是任何带有 yield
语句的函数。生成器函数不是迭代器,但在您调用它时它 return 是一个迭代器。
def getSquares(n):
for i in range(n):
yield i**2
生成器迭代器
这是由生成器函数return编辑的东西。
生成器表达式
这只是括号内的理解。
(i**2 for i in range(10))
生成器表达式和生成器函数的 return 值在调用 type
时都会给出 <class 'generator'>
。但是,如果您使用 __next__
方法定义自己的 class,它的实例当然会将 class 作为它们的 type
。
我想了解迭代器和生成器之间的区别。我读到“每个生成器都是一个迭代器,但反之亦然。”
有人可以举例说明一个对象是迭代器,但不是生成器吗?
我的意思是,如果一个对象有方法next(这是迭代器的定义),我们也可以称它为生成器,不是吗?
UPD:对于那些说发电机必须有 yield 的人 - 并非总是如此。 (i**2 for i in range(1,5)) 没有收益,也是一个生成器。
对于那些说 iter([1,2,3]) 不是生成器的人 - 为什么?它与生成器的哪个定义相矛盾,在哪里?
"Every generator is an iterator, but not vice versa."
我认为这不一定是真的。 Python glossary 给出了 3 个以“generator”开头的条目。
发电机
这是任何带有 yield
语句的函数。生成器函数不是迭代器,但在您调用它时它 return 是一个迭代器。
def getSquares(n):
for i in range(n):
yield i**2
生成器迭代器
这是由生成器函数return编辑的东西。
生成器表达式
这只是括号内的理解。
(i**2 for i in range(10))
生成器表达式和生成器函数的 return 值在调用 type
时都会给出 <class 'generator'>
。但是,如果您使用 __next__
方法定义自己的 class,它的实例当然会将 class 作为它们的 type
。