我有以下代码。
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
这正是我所期望的。我已经阅读了几个类似的问题(包括这个),但我仍然不明白这里发生了什么。
我的理解如下:
我们通过调用next(x)
来启动生成器,它开始执行并进入第2行的while
循环。在第3行上,我们有一个yield
语句,执行暂停。在第10行,我们发送值3
。执行在第3行恢复,将d
设置为3
,然后我们返回d
。在第10行,send
返回产生的值(3
)。生成器继续执行,直到回到第3行的yield
语句,等等。
是否有错误?我在这里做错了什么?
yield
? - Kelly Bundyd = yield
本质上是用于接收传入数据(在有数据可用之前会阻塞),而yield d
用于生成传出数据。 - mlz7d = yield
总是默认隐式地yield None
? - mlz7yield d
不会保存它接收到的内容,而d = yield
则会产生None
值并接收一个值。 - zvone