[issue47221] Bug or bad performance
Cezary Wagner
report at bugs.python.org
Mon Apr 4 18:21:34 EDT 2022
Cezary Wagner <cezary.wagner at gmail.com> added the comment:
Some more experiments:
import dis
import timeit
REPEATS = 100
def test1():
selected = []
for i in range(REPEATS):
if i >= 25 and i <= 75:
selected.append(i)
return selected
def test2():
selected = []
for i in range(REPEATS):
if 25 <= i <= 75:
selected.append(i)
return selected
def test3():
return [x for x in range(REPEATS) if x >= 25 and x <= 75]
def test4():
return [x for x in range(REPEATS) if 25 <= x <= 75]
def test(f):
print(dis.dis(f.__code__.co_code))
print(timeit.timeit(f))
test(test1)
test(test2)
test(test3)
test(test4)
Result:
0 BUILD_LIST 0
2 STORE_FAST 0 (0)
4 LOAD_GLOBAL 0 (0)
6 LOAD_GLOBAL 1 (1)
8 CALL_FUNCTION 1
10 GET_ITER
>> 12 FOR_ITER 15 (to 44)
14 STORE_FAST 1 (1)
16 LOAD_FAST 1 (1)
18 LOAD_CONST 1 (1)
20 COMPARE_OP 5 (>=)
22 POP_JUMP_IF_FALSE 21 (to 42)
24 LOAD_FAST 1 (1)
26 LOAD_CONST 2 (2)
28 COMPARE_OP 1 (<=)
30 POP_JUMP_IF_FALSE 21 (to 42)
32 LOAD_FAST 0 (0)
34 LOAD_METHOD 2 (2)
36 LOAD_FAST 1 (1)
38 CALL_METHOD 1
40 POP_TOP
>> 42 JUMP_ABSOLUTE 6 (to 12)
>> 44 LOAD_FAST 0 (0)
46 RETURN_VALUE
None
4.565677999999025
0 BUILD_LIST 0
2 STORE_FAST 0 (0)
4 LOAD_GLOBAL 0 (0)
6 LOAD_GLOBAL 1 (1)
8 CALL_FUNCTION 1
10 GET_ITER
>> 12 FOR_ITER 19 (to 52)
14 STORE_FAST 1 (1)
16 LOAD_CONST 1 (1)
18 LOAD_FAST 1 (1)
20 DUP_TOP
22 ROT_THREE
24 COMPARE_OP 1 (<=)
26 POP_JUMP_IF_FALSE 18 (to 36)
28 LOAD_CONST 2 (2)
30 COMPARE_OP 1 (<=)
32 POP_JUMP_IF_FALSE 25 (to 50)
34 JUMP_FORWARD 2 (to 40)
>> 36 POP_TOP
38 JUMP_ABSOLUTE 6 (to 12)
>> 40 LOAD_FAST 0 (0)
42 LOAD_METHOD 2 (2)
44 LOAD_FAST 1 (1)
46 CALL_METHOD 1
48 POP_TOP
>> 50 JUMP_ABSOLUTE 6 (to 12)
>> 52 LOAD_FAST 0 (0)
54 RETURN_VALUE
None
5.6398234000007506
0 LOAD_CONST 1 (1)
2 LOAD_CONST 2 (2)
4 MAKE_FUNCTION 0
6 LOAD_GLOBAL 0 (0)
8 LOAD_GLOBAL 1 (1)
10 CALL_FUNCTION 1
12 GET_ITER
14 CALL_FUNCTION 1
16 RETURN_VALUE
None
3.8792907999959425
0 LOAD_CONST 1 (1)
2 LOAD_CONST 2 (2)
4 MAKE_FUNCTION 0
6 LOAD_GLOBAL 0 (0)
8 LOAD_GLOBAL 1 (1)
10 CALL_FUNCTION 1
12 GET_ITER
14 CALL_FUNCTION 1
16 RETURN_VALUE
None
3.8591266999937943
----------
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue47221>
_______________________________________
More information about the Python-bugs-list
mailing list