2017-09-14 73 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”。这也使开销加倍。 –