While-loop with if-statement is faster than while-loop

I am doing some testing regarding if-statement speed in loops and their effect on speed. Something I found was that if-statement consistently improved performance. My code is:

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 

Sample output will be:

 1355517837.993 1.7850000858306885 1.7209999561309814 

This is completely contradictory. The while-if loop is constantly running, slightly faster than the standard while-loop. This happens almost every time I run it; perhaps 1 to 20 times the time. Does anyone know why?

+6
source share
2 answers

I would suggest that the compiler will remove the True block, as it is persistent.

When I run, I get mostly opposite results from you. I can just be a random effect of the runtime.

+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

+3
source

This shows that there are a few more steps in the if loop.

 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 
+5
source

All Articles