2012-05-30 73 views
0

我正在做斐波那契序列。每次我處理控制檯(在Windows上)時,它運行速度都很快,並且突然自行退出。發電機與睡眠方法無法正常工作?

所以我用Time.sleep()來看看發生了什麼。 這裏是源:

def fibo(): 
     pv1,pv2 = 0,1 
     while True: 
     yield pv2 
     pv1,pv2=pv2,pv1+pv2 
    import time 
    f=fibo() 
    for result in f: 
     print(result,end=' ') 
     time.sleep(0.5) 

我的預期 「1 1 2 3 ......」 每0.5秒,但它永遠不會奏效!沒有睡眠方法,它運行良好。 我認爲有些事情,但我太無知,不知道爲什麼。

+1

你是什麼意思的「從來沒有工作」?它有什麼作用?我的電腦上有 –

+0

,沒有任何反應。控制檯屏幕什麼也不做,只是獨立 –

+0

我會建議你從一個命令行終端工作,並從那裏調用youyr程序 - 這樣你可能會擔心你的代碼,而不是與開發unfirendly環境所需的人工構造即您對time.sleep的調用)。請注意,alkl Python開發本身是由使用命令行的人員創建的。 – jsbueno

回答

1

默認情況下,當標準輸出轉到終端時,輸出是行緩衝的。您可以通過手動刷新標準輸出來使代碼正常工作。這是你如何沖洗標準輸出:

import sys # probably near the top of the file 
sys.stdout.flush() # after printing 
+0

哇它的作品!十分感謝! –

+0

,但我仍然不知道在緩衝區中是否有睡眠或不睡覺...請介紹我的任何文檔或鏈接?我會感激! –

+1

@stackneveroverflow:沒有任何區別。隨着睡眠,問題更加明顯。沒有睡眠,問題就不那麼明顯了。標準輸出在程序退出時被刷新,所以這就是爲什麼您(簡要地)看到該程序的輸出。實際上,即使沒有明顯的潮紅,即使在睡眠的情況下,劇本結束也會沖洗。這很難看,因爲間隔時間太短。無論如何,[這是一個有點相關的問題](http://stackoverflow.com/q/107705)。真正的答案是C99標準的§7.1.3¶3。 – icktoofay