当我在谷歌上搜索 python yield
时,我发现了一些有趣的东西,而且我以前不知道,即我们可以将值传递给 yield 以更改 next() 值。我希望一些新的 pythonist 现在可能意识到这一点,但我也不确定它是如何工作的。所以,如果有人可以解释它是如何工作的,以及当我使用 send()
发送新索引以产生时行为如何变化。
这是我的片段:
def print_me (count):
i = 0
while i < count:
val = (yield i)
if val is not None:
i = val
else:
i += 1
gen = print_me(10)
for i in gen:
if i == 5:
gen.send(8)
else:
print i
这是我的输出:
0
1
2
3
4
9
最佳答案
您的测试代码实际上很有指导意义。在这样的生成器函数中发生的事情是,每当您在生成器上调用 next
时,代码都会执行,直到它遇到 yield
语句。产生该值,然后在生成器中执行“暂停”。如果你.send
生成器的一些数据,该值从 yield
返回。如果您不.send
任何东西,yield
返回None
。
所以在您的代码中,当您.send(8)
时,它会在您的生成器中设置val = 8
(val = yield i
).因为 val 不是 None
,i
被设置为 8
。 .send
实际上一直执行到下一个 yield 语句(返回该值 -- 8
)。然后事情恢复正常(下一个要生成的数字是 9
)。
关于python - 使用 send 将值传递给 yield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579756/