簡體   English   中英

為什么這段代碼不打印3

[英]Why doesn't this code print 3

這是代碼(由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? 我錯過了什么?

作為記錄 ,發送一個值到發電機還使得發生器前進一個步驟,並產生它的下一個值。 值c在c.send(3) ,但是你沒有做任何事情,所以你沒有看到它。 然后在下一次通過while循環的行程中,它從那里開始倒計時。 如果您更改最后一行以print c.send(3)那么您將看到3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM