我有这个发电机功能:-
>>> def gen():
... for i in range(3):
... yield i*i
现在,当我在gen()上调用next()时,它每次都给出第一个元素。
>>> next(gen())
0
>>> next(gen())
0
但当我在for循环中使用它时,它会按预期工作:-
>>> for i in gen():
... print(i)
...
0
1
4
有人能解释一下造成这种影响的原因吗?还有我在这里遗漏的概念吗??
最佳答案
每次调用gen()
时,函数都返回一个新的生成器。
我想最简单的理解方法就是对比一下你在做什么:
>>> next(gen())
0
>>> next(gen())
0
有了这个:
>>> my_gen = gen()
>>> next(my_gen)
0
>>> next(my_gen)
1
>>> next(my_gen)
4
>>> next(my_gen)Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
在后一种情况下,我从同一个生成器获取新值。
关于python - 在生成器函数上使用next(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50573100/