Phillip J. Eby wrote:
>>here's the disassembly:
>
> FYI, that's not a dissassembly of what timeit was actually timing; see
> 'template' in timeit.py.
> As a practical matter, the only difference would probably be the use of
> LOAD_FAST instead of
> LOAD_NAME, as
> timeit runs the code in a function body.
>>> def f1(a):
... if a in (1, 2, 3):
... pass
...
>>> def f2(a):
... if a == 1 or a == 2 or a == 3:
... pass
...
>>> dis.dis(f1)
2 0 LOAD_FAST 0 (a)
3 LOAD_CONST 4 ((1, 2, 3))
6 COMPARE_OP 6 (in)
9 JUMP_IF_FALSE 4 (to 16)
12 POP_TOP
3 13 JUMP_FORWARD 1 (to 17)
>> 16 POP_TOP
>> 17 LOAD_CONST 0 (None)
20 RETURN_VALUE
>>>
>>> dis.dis(f2)
2 0 LOAD_FAST 0 (a)
3 LOAD_CONST 1 (1)
6 COMPARE_OP 2 (==)
9 JUMP_IF_TRUE 26 (to 38)
12 POP_TOP
13 LOAD_FAST 0 (a)
16 LOAD_CONST 2 (2)
19 COMPARE_OP 2 (==)
22 JUMP_IF_TRUE 13 (to 38)
25 POP_TOP
26 LOAD_FAST 0 (a)
29 LOAD_CONST 3 (3)
32 COMPARE_OP 2 (==)
35 JUMP_IF_FALSE 4 (to 42)
>> 38 POP_TOP
3 39 JUMP_FORWARD 1 (to 43)
>> 42 POP_TOP
>> 43 LOAD_CONST 0 (None)
46 RETURN_VALUE
> Still, it's rather interesting that tuple.__contains__ appears slower than a
> series of LOAD_CONST
> and "==" operations, considering that the tuple should be doing basically the
> same thing, only
> without bytecode fetch-and-decode overhead. Maybe it's tuple.__contains__
> that needs optimizing
> here?
wouldn't be the first time...
</F>
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com