Yos*_*233 6 python performance if-statement while-loop python-3.x
我正在做一些关于循环中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
Run Code Online (Sandbox Code Playgroud)
示例输出将是:
1355517837.993
1.7850000858306885
1.7209999561309814
Run Code Online (Sandbox Code Playgroud)
这完全是违反直觉的.while-if-loop的工作速度比标准的while循环要快得多.几乎每次我运行时都会发生这种情况; 也许每20次中有1次需要更长时间.有谁知道为什么?
dis显示if语句循环时有更多步骤.
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_VALUE
Run Code Online (Sandbox Code Playgroud)
我猜编译器会删除 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
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |