[Python-Dev] Re: Re: Prospective Peephole Transformation
Fredrik Lundh
fredrik at pythonware.com
Fri Feb 18 17:52:08 CET 2005
Phillip J. Eby wrote:
> Were these timings done with the code that turns (1,2,3) into a constant?
I used a stock 2.4 from python.org, which seems to do this (for tuples,
not for lists).
> Also, I presume that these timings still include extra LOAD_FAST operations that could be replaced
> with DUP_TOP in the actual expansion, although I don't know how much difference that would make in
> practice, since saving the argument fetch might be offset by the need to swap and pop at the end.
here's the disassembly:
>>> dis.dis(compile("if a in (1, 2, 3): pass", "", "exec"))
1 0 LOAD_NAME 0 (a)
3 LOAD_CONST 4 ((1, 2, 3))
6 COMPARE_OP 6 (in)
9 JUMP_IF_FALSE 4 (to 16)
12 POP_TOP
13 JUMP_FORWARD 1 (to 17)
>> 16 POP_TOP
>> 17 LOAD_CONST 3 (None)
20 RETURN_VALUE
>>> dis.dis(compile("if a == 1 or a == 2 or a == 3: pass", "", "exec"))
1 0 LOAD_NAME 0 (a)
3 LOAD_CONST 0 (1)
6 COMPARE_OP 2 (==)
9 JUMP_IF_TRUE 26 (to 38)
12 POP_TOP
13 LOAD_NAME 0 (a)
16 LOAD_CONST 1 (2)
19 COMPARE_OP 2 (==)
22 JUMP_IF_TRUE 13 (to 38)
25 POP_TOP
26 LOAD_NAME 0 (a)
29 LOAD_CONST 2 (3)
32 COMPARE_OP 2 (==)
35 JUMP_IF_FALSE 4 (to 42)
>> 38 POP_TOP
39 JUMP_FORWARD 1 (to 43)
>> 42 POP_TOP
>> 43 LOAD_CONST 3 (None)
46 RETURN_VALUE
</F>
More information about the Python-Dev
mailing list