我有这个发电机功能:-你知道吗
>>> 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
有人能解释这种影响的原因吗?还有我在这里所缺少的概念??你知道吗
Tags:
每次调用函数时,它都返回一个生成器对象。每次调用next时,您都会得到第一个项,它是
0 * 0
,因为您不是在同一个对象上调用next(每次都是一个新对象)。但在第二种情况下,您在一个生成器对象上循环,它将继续使用生成器,直到它到达StopIteration
。你知道吗为了更好地演示,您可以从生成器函数创建两个迭代器对象,并同时在它们上循环:
每次调用
gen()
时,函数都会返回一个新的生成器。你知道吗我认为最简单的理解方法是对比你在做什么:
有了这个:
在后一种情况下,我将从相同的生成器中获取新值。你知道吗
相关问题 更多 >
编程相关推荐