2017-09-14 72 views
0

爲什麼對於循環,if條件在第一種情況下比使用條件生成器表達式的第二種情況快2倍以上?爲什麼簡單for循環,如果條件比python中的條件生成器表達式更快

%%timeit 
for i in range(100000): 
    if i < 10000: 
     continue 
    pass 

時鐘在100個循環,最好的3:每次循環2.85毫秒,同時使用發電機表達:

%%timeit 
for i in (i for i in range(100000) if i >= 10000): 
    pass 

100循環,最好的3:每次循環6.03毫秒

+1

我猜是因爲你在第二個版本中的值翻了兩番(1'for' vs 2'for''s) – Julien

+2

這有*沒有任何東西與'大o'有關。 –

+0

大o標記不適用,除非您正在查看許多不同的循環大小。 –

回答

1

首先版本:對於範圍中的每個元素:將其分配給i

第二個版本:對於在範圍內的每個元素:將其分配給內i(從左邊第三個),評估表達式i(所述i...(i for...分配結果爲「外」(最左邊)i

if語句在這兩個版本中可能會有類似的性能影響

+0

也在想(並定時),每次迭代都必須從其迭代器中檢查「StopIteration」。這也使開銷加倍。 –