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
任何人都可以提供解釋爲什麼會發生這種情況?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
的gc.collect()
的結果是number of unreachable objects:
gc.collect([generation])
不帶任何參數,運行一個完整的集合。可選參數的生成可以是一個整數,指定要收集哪一代(從0
到2
)。如果世代號碼無效,則會產生一個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
啊是的這是令人尷尬的。感謝您的澄清! – goh
你也知道爲什麼你每迭代一步得到一個打印?我希望只有一個額外的打印的最後一個表達式。這是for循環的「特徵」嗎? – mkiever
@mkiever,*每個*時間通過循環打印當前值*和* gc.collect的結果由REPL打印。收集是在循環內而不是在循環之後。 – paxdiablo