Tobias Weber <t...@gmx.net> writes: > Hi, > whenever I type an "object literal" I'm unsure what optimisation will do > to it. > > def m(arg): > if arg & set([1,2,3]): > return 4 > > Is the set created every time the method is called? What about a > frozenset? Or tuple vs list? After how many calls per second does it pay > to save it at the module level? Would anybody else find this ugly? > > Also I never profiled the regular expression cache...
the dis module can help you for these: >>> import dis >>> def m(arg): ... if arg & set([1,2,3]): ... return 4 ... >>> dis.dis(m) 2 0 LOAD_FAST 0 (arg) 3 LOAD_GLOBAL 0 (set) 6 LOAD_CONST 1 (1) 9 LOAD_CONST 2 (2) 12 LOAD_CONST 3 (3) 15 BUILD_LIST 3 18 CALL_FUNCTION 1 21 BINARY_AND 22 JUMP_IF_FALSE 5 (to 30) 25 POP_TOP 3 26 LOAD_CONST 4 (4) 29 RETURN_VALUE >> 30 POP_TOP 31 LOAD_CONST 0 (None) 34 RETURN_VALUE As you can see, the list literal is built every time the function code is executed. -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list