我正在做一些关于循环中if语句的速度及其对速度的影响的测试。我发现,if语句始终提高了性能。我的代码:
import time
t = time.time
start = t()
x = 0
while x < 10000000:
x += 1
time1 = t()
x = 0
while x < 10000000:
x += 1
if True:
pass
time2 = t()
print(start)
print(time1 - start) # Time for simple while-loop
print(time2 - time1) # Time for while+if示例输出为:
1355517837.993
1.7850000858306885
1.7209999561309814这是完全违反直觉的。while-if-loop的运行速度比标准while-loop要快得多。几乎每次我运行它的时候都会发生这种情况;也许20次中就有1次需要更长的时间。有人知道为什么吗?
发布于 2012-12-15 05:13:08
我猜编译器会删除if True块,因为它是常量。
当我运行时,我得到的结果大多与您相反。我可能只是执行环境的随机效应。
1355519587.2 0.832797050476 1.04382395744
1355519590.03 0.863899946213 1.09347200394
1355519593.72 0.831655025482 1.05389809608
1355519599.71 0.831452131271 1.41783499718
1355519602.99 0.815280914307 1.05724310875
1355519605.72 0.826404094696 1.05700492859
1355519608.94 0.827296972275 1.07807898521
发布于 2012-12-15 05:21:26
dis显示if语句while循环有更多的步骤。
In [4]: dis.dis(t2)
2 0 LOAD_CONST 1 (0)
3 STORE_FAST 0 (x)
3 6 SETUP_LOOP 26 (to 35)
>> 9 LOAD_FAST 0 (x)
12 LOAD_CONST 2 (10000000)
15 COMPARE_OP 0 (<)
18 POP_JUMP_IF_FALSE 34
4 21 LOAD_FAST 0 (x)
24 LOAD_CONST 3 (1)
27 INPLACE_ADD
28 STORE_FAST 0 (x)
31 JUMP_ABSOLUTE 9
>> 34 POP_BLOCK
>> 35 LOAD_CONST 0 (None)
38 RETURN_VALUE
In [5]: dis.dis(t1)
2 0 LOAD_CONST 1 (0)
3 STORE_FAST 0 (x)
3 6 SETUP_LOOP 35 (to 44)
>> 9 LOAD_FAST 0 (x)
12 LOAD_CONST 2 (10000000)
15 COMPARE_OP 0 (<)
18 POP_JUMP_IF_FALSE 43
4 21 LOAD_FAST 0 (x)
24 LOAD_CONST 3 (1)
27 INPLACE_ADD
28 STORE_FAST 0 (x)
5 31 LOAD_GLOBAL 0 (True)
34 POP_JUMP_IF_FALSE 9
6 37 JUMP_ABSOLUTE 9
40 JUMP_ABSOLUTE 9
>> 43 POP_BLOCK
>> 44 LOAD_CONST 0 (None)
47 RETURN_VALUEhttps://stackoverflow.com/questions/13886258
复制相似问题