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> -- http://mail.python.org/mailman/listinfo/python-list