[英]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.