Alex Martelli wrote: > Bengt Richter <[EMAIL PROTECTED]> wrote: > ... > >>>Personally, I'd always use (depending on guesses regarding lengths of >>>lists) [x for x in l1 if x in l2] or the setified equivalent, of course. >>> >> >>Perhaps newbies should be advised that >> >> [x for x in l1 if x in set(l2)] >> >>is not a (well) setified equivalent? I could see them being tempted. > > > You mean, newbies should be advised that Python does NOT hoist any > computations whatsoever from the body of a loop (including LCs and > genexps), so if you want anything hoisted you need to hoist it yourself? > Yes, it is a point worth making, since the lack of hoisting is a > frequent cause of performance loss. > Of course now 2.5 is planning to include the AST parser there's fruitful ground for optimization studies that will perform hoisting automatically (should anyone be looking for a project ;-)
Given that Python 2.4 doesn't even perform simple constant folding for arithmetic expressions >>> dis.dis(compile("print 1+2", '', 'exec')) 1 0 LOAD_CONST 0 (1) 3 LOAD_CONST 1 (2) 6 BINARY_ADD 7 PRINT_ITEM 8 PRINT_NEWLINE 9 LOAD_CONST 2 (None) 12 RETURN_VALUE even hoisting could be seen as an "advanced" optimization. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC www.holdenweb.com PyCon TX 2006 www.python.org/pycon/ -- http://mail.python.org/mailman/listinfo/python-list