2015-09-04 35 views
0

任何人都可以提供解釋爲什麼會發生這種情況?python gc.collect()in循環

>>> for i2 in range(10): 
...  print i2 
...  gc.collect() 
... 
0 
0 
1 
0 
2 
0 
3 
0 
4 
0 
5 
0 
6 
0 
7 
0 
8 
0 
9 
0 

回答

1

gc.collect()的結果是number of unreachable objects

gc.collect([generation])

不帶任何參數,運行一個完整的集合。可選參數的生成可以是一個整數,指定要收集哪一代(從02)。如果世代號碼無效,則會產生一個ValueError返回找到的不可到達對象的數量。

當你進入該程序成Python交互,所有這些調用的結果正在被REPL輸出(讀EVAL-打印循環)。這與您在交互式輸入42+7到Python時的情況並沒有什麼不同,儘管存在沒有表示您希望打印它(例如,使用print調用),但它會回顯49

因此,您看到的輸出是來自gc.collect()的所有零返回值,散佈在範圍打印的「實際」輸出中。

如果您將其作爲實際腳本運行,您只會看到號碼0..9,因爲不涉及REPL。或者你可以同樣防止返回值被輸出,例如:

>>> for i2 in range(4): 
...  print i2 
...  junk = gc.collect() 
... 
0 
1 
2 
3 
+0

啊是的這是令人尷尬的。感謝您的澄清! – goh

+0

你也知道爲什麼你每迭代一步得到一個打印?我希望只有一個額外的打印的最後一個表達式。這是for循環的「特徵」嗎? – mkiever

+0

@mkiever,*每個*時間通過循環打印當前值*和* gc.collect的結果由REPL打印。收集是在循環內而不是在循環之後。 – paxdiablo