efficiency question

diffuser78 at gmail.com diffuser78 at gmail.com
Fri Jun 30 20:16:34 CEST 2006


So nice to know this that you can compare your own code using this
methodology. I was completely unaware of this. Thank you so much.



Fredrik Lundh wrote:
> David Harvey wrote:
>
> > Suppose I write
> >
> > if x in ("abc", "def", "xyz"):
> > doStuff()
> >
> > elif x in ("pqr", "tuv", "123"):
> > doOtherStuff()
> >
> > elif ...
> > When is python building the tuples? Does it need to build the tuple
> > every time it comes through this code? Or does it somehow recognise
> > that they are constant and cache them?
>
> when in doubt, ask the compiler:
>
> def code(x):
>     if x in ("abc", "def", "xyz"):
>         doStuff()
>     elif x in ("pqr", "tuv", "123"):
>         doOtherStuff()
>
> import dis
> dis.dis(code)
>
> prints:
>
>   2           0 LOAD_FAST                0 (x)
>               3 LOAD_CONST               7 (('abc', 'def', 'xyz'))
>               6 COMPARE_OP               6 (in)
>               9 JUMP_IF_FALSE           11 (to 23)
>              12 POP_TOP
>
>   3          13 LOAD_GLOBAL              1 (doStuff)
>              16 CALL_FUNCTION            0
>              19 POP_TOP
>              20 JUMP_FORWARD            25 (to 48)
>         >>   23 POP_TOP
>
>   4          24 LOAD_FAST                0 (x)
>              27 LOAD_CONST               8 (('pqr', 'tuv', '123'))
>              30 COMPARE_OP               6 (in)
>              33 JUMP_IF_FALSE           11 (to 47)
>              36 POP_TOP
>
>   5          37 LOAD_GLOBAL              2 (doOtherStuff)
>              40 CALL_FUNCTION            0
>              43 POP_TOP
>              44 JUMP_FORWARD             1 (to 48)
>         >>   47 POP_TOP
>         >>   48 LOAD_CONST               0 (None)
>              51 RETURN_VALUE
>
> so the answer is "yes, in this specific case".
>
> > (The tuples I have in mind are of course much longer than three
> > elements)
>
> in that case, you should probably use pre-calculated sets instead of tuples.
> 
> </F>




More information about the Python-list mailing list