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 に設定されると、次の反復では 2 ではなく 3 が生成されますか? 私は何が欠けていますか?

4

1 に答える 1

4

文書化されているように、値をジェネレーターに送信すると、ジェネレーターはもう 1 ステップ進み、次の値を生成します。行で値 3 が生成されc.send(3)ますが、何もしていないため表示されません。次に while ループを通過すると、そこからカウントダウンが続けられます。最後の行を に変更するprint c.send(3)と、3 が表示されます。

于 2013-09-25T04:54:14.990 に答える