我试图理解迭代器和生成器之间的区别。我读到“每个生成器都是一个迭代器,但反之亦然。”
有人可以给出一个对象的例子,它是一个迭代器,但不是一个生成器?
我的意思是,如果一个对象具有方法next(这是迭代器的定义),我们也可以将其称为生成器,不是吗?
UPD:对于那些说生成器必须具有yield的人-并不总是。(i * * 2 为 i 在范围(1,5))没有产量,也是一个发电机。
对于那些说 iter([1,2,3])不是生成器的人-为什么?
“每个生成器都是一个迭代器,但反之亦然。
Python glossary给出了 3 个以“generator”开头的条目。
发电机
这是任何带有yield
语句的函数。生成器函数不是迭代器,但在调用它时返回迭代器。
def getSquares(n):
for i in range(n):
yield i**2
生成器迭代器
这是由生成器函数返回的东西。
生成器表达式
这只是括号内的理解。
(i**2 for i in range(10))
当你对它们调用type
时,生成器表达式和生成器函数的返回值都给出<cl 'generator'>
。但是,如果你用__next__
方法定义你自己的类,它的实例当然会将该类作为它们的type
。
有人可以给出一个对象的例子,它是一个迭代器,但不是一个生成器?
Python 中的 Generator 通常表示一个函数,但也可以表示由该函数创建的迭代器。
有人可以给出一个对象的例子,它是一个迭代器,但不是一个生成器迭代器?
这里是:
cl MyIterator:
def __init__(self):
self.n = 0
def __iter__(self):
return self
def __next__(self):
if self.n == 4:
raise StopIteration
n, self.n = self.n, self.n + 1
return n
it = MyIterator()
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(38条)