在生成函数上使用Next()
问题描述
我有此生成器函数:-
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
在后一种情况下,我将从Same生成器获取新值。
相关文章