gpt4 book ai didi

python - 为什么 next() 总是显示相同的值?

转载 作者:行者123 更新时间:2023-11-28 19:54:17 25 4
gpt4 key购买 nike

我正在练习 yield 语句。我在 Python 2.7 中编写了以下函数:

>>> def mygen():
... i = 0
... j = 3
... for k in range(i, j):
... yield k
...
>>> mygen().next()
0
>>> mygen().next()
0
>>> mygen().next()
0

每当我调用 mygen().next() 时,它总是将输出显示为 0,而不是 01 2停止迭代。谁能解释一下?

最佳答案

您每次都重新创建生成器,所以它每次都从头开始。

创建生成器一次:

gen = mygen()
gen.next()
gen.next()
gen.next()

每次调用生成器函数时都会生成一个新的迭代器;这样你就可以制作多个独立的副本。每个独立的迭代器都是函数的调用,可以与其他迭代器分开单步执行:

>>> def mygen():
... i = 0
... j = 3
... for k in range(i, j):
... yield k
...
>>> gen1 = mygen()
>>> gen2 = mygen()
>>> gen1.next()
0
>>> gen1.next()
1
>>> gen2.next()
0
>>> gen2.next()
1
>>> gen1.next()
2
>>> gen1.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

请注意,您可能想要使用 next() function而不是直接调用 generator.next():

next(gen)

generator.next() 被认为是一个钩子(Hook)(Python 3 将其重命名为 generator.__next__()next() 函数是以跨版本兼容的方式调用它的官方 API。

关于python - 为什么 next() 总是显示相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822840/

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