阅读有关Python协程,我遇到了这个代码:为什么这个Python生成器/协程失去一个值?
def countdown(n):
print("Start from {}".format(n))
while n >= 0:
print("Yielding {}".format(n))
newv = yield n
if newv is not None:
n = newv
else:
n -= 1
c = countdown(5)
for n in c:
print(n)
if n == 5: c.send(2)
这奇怪的输出:
Start from 5
Yielding 5
5
Yielding 3
Yielding 2
2
Yielding 1
1
Yielding 0
0
特别是,它错过打印3
。为什么?
,因为我不要求什么send
确实引用的问题不回答这个问题。它将值发送回函数。我问的是为什么在我发行send(3)
后,下一个产量应该是3,不会导致for循环打印3.
首先,它也错过了4。其次,你认为'c.send(3)'做了什么? – alfasin
@alfasin由于'c.send(3)',它错过了4。关键是代码应该将'n'设置为3,然后在下一个循环中产生3.但是它不会被打印。为什么? – Ritzymon
如果你在'if newv不是None:'block –