Python Generator:令人困惑的结果

sol*_*lid 5 python yield generator next

我正在玩生成器以更好地理解它们的工作方式,但我对以下代码的结果感到困惑:

>>> def gen():
...  for i in range(5):
...   yield i
...
>>> count=gen()
>>> for i in count:
...  print count.next()
...
1
3
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
StopIteration
>>>
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?看起来,当它点击"for i in count:"行时,生成器产生第一个值.我不确定.

编辑:我应该补充一点,我不是想"正确".我正在试图破解Python的反应.当我生成错误时,我会更多地了解该语言.这个错误让我很难过,但现在一切都清楚了.到目前为止,所有答案都简短而甜蜜.谢谢大家!

The*_*nse 5

你的代码应该是这样的

码:

def gen():
    for i in range(5):
        yield i

count=gen()
for i in count:
    print i
Run Code Online (Sandbox Code Playgroud)

输出:

0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

笔记:

当你循环for i in count尝试再次获取下一个项目时,count.next()你试图得到第二个元素.所以基本上你试图从当前位置获得元素+2

那么代码中发生的事情如下:

脚步 :

1. for i in count这里得到的下一个值是0

2. print count.next()再次调用下一个值并打印以便1打印

3. for i in count这里再次调用下一个值2

4. print count.next()再次调用下一个值并打印,以便3打印

5. for i in count这里再次调用下一个值4

6.最后你在这里打电话,print count.next()因为发电机没有值.你已经给出了例外StopIteration