gpt4 book ai didi

python - 在协程中产生

转载 作者:行者123 更新时间:2023-12-05 05:30:08 25 4
gpt4 key购买 nike

我有以下代码。

def gen():
while True: # line 2
d = yield # line 3
yield d # line 4

x = gen()
next(x)

for i in (3, 4, 5):
print(x.send(i)) # line 10

当我运行它时,我得到:

3
None
5

而不是:

3
4
5

这是我所期望的。我已经回答了几个类似的问题(包括 this one ),但我仍然不明白这里发生了什么。

我的理解是这样的:我们通过调用 next(x) 启动生成器,它开始执行并在第 2 行进入 while 循环。在第 3 行,我们有一个 yield 语句和执行暂停。在第 10 行,我们发送值 3。执行在第 3 行恢复,d 设置为 3,我们返回 d。在第 10 行,send 返回产生的值 (3)。生成器继续执行,直到我们回到第 3 行的 yield 语句,等等。

这是不正确的吗?我在这里做错了什么?

最佳答案

x = yield y 做了两件事:

  1. 返回y
  2. 将下一个发送的值分配给x

没有y,返回None。如果没有 x =,发送的值就会被丢弃。

所以这里发生的是:

code         effects         comments
---------------------------------------------
d = yield return None ok, you ignore it
d = 3
yield d return 3 gets printed
Throw away 4
d = yield return None gets printed
d = 5
yield d return 5 gets printed

您可以这样修复它,始终存储并返回每个发送的值:

def gen():
d = None # or `d = yield`, either works, just differently
while True:
d = yield d

关于python - 在协程中产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74777277/

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