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的反应.当我生成错误时,我会更多地了解该语言.这个错误让我很难过,但现在一切都清楚了.到目前为止,所有答案都简短而甜蜜.谢谢大家!
你的代码应该是这样的
码:
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
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |