1

这是代码(由 David Beazley 提供,幻灯片 #32 http://dabeaz.com/coroutines/Coroutines.pdf):

def countdown(n):
  print "Counting down from", n
  while n >= 0:
    newvalue = (yield n)
    # If a new value got sent in, reset n with it
    if newvalue is not None:
      n = newvalue
    else:
      n -= 1

c = countdown(5)
for n in c:
  print n
  if n == 5:
    c.send(3)

这是输出:http ://codepad.org/8eY3HLsK

我知道它不打印 4,但为什么不打印 3?一旦 n 设置为 3,下一次迭代应该产生 3 而不是 2?我错过了什么?

4

1 回答 1

4

文档所述,向生成器发送值也会导致生成器再前进一步并产生下一个值。值 3 在 line 处产生c.send(3),但你没有对它做任何事情,所以你看不到它。然后在下一次通过 while 循环时,它会从那里开始倒计时。如果您将最后一行更改为print c.send(3)然后您将看到 3。

于 2013-09-25T04:54:14.990 回答