gpt4 book ai didi

Python 生成器 : confusing result

转载 作者:太空狗 更新时间:2023-10-30 00:39:35 24 4
gpt4 key购买 nike

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

>>> 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
>>>

这是怎么回事?看起来当它到达“for i in count:”行时,生成器生成第一个值。我不确定。

编辑:我应该补充一点,我并不是要“做对”。我试图破坏事物以查看 Python 的 react 。当我产生错误时,我会更多地了解该语言。这个错误让我很困惑,但现在一切都清楚了。到目前为止,所有的答案都是简短而甜蜜的。谢谢大家!

最佳答案

你的代码应该是这样的

代码:

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

count=gen()
for i in count:
print i

输出:

0
1
2
3
4

注意事项:

当你循环 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

关于Python 生成器 : confusing result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33100206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com