Benjamin Peterson <[EMAIL PROTECTED]> added the comment:

This is because list comprehensions are implemented as functions in 3.0
so their scope is not leaked out to the rest of the function.

Here is the bytecode for 2.6:
>>> dis.dis(f)
  2           0 BUILD_LIST               0
              3 DUP_TOP             
              4 STORE_FAST               0 (_[1])
              7 LOAD_CONST               5 ((1, 2, 3))
             10 GET_ITER            
        >>   11 FOR_ITER                14 (to 28)
             14 STORE_FAST               1 (x)
             17 LOAD_FAST                0 (_[1])
             20 LOAD_FAST                1 (x)
             23 YIELD_VALUE         
             24 LIST_APPEND         
             25 JUMP_ABSOLUTE           11
        >>   28 DELETE_FAST              0 (_[1])
             31 STORE_FAST               1 (x)

  3          34 LOAD_CONST               4 (5)
             37 YIELD_VALUE         
             38 POP_TOP             

  4          39 LOAD_FAST                1 (x)
             42 YIELD_VALUE         
             43 POP_TOP             
             44 LOAD_CONST               0 (None)
             47 RETURN_VALUE        

and here it is for 3.0:
>>> dis.dis(f)
  2           0 LOAD_CONST               1 (<code object <listcomp> at
0x740770, file "<stdin>", line 2>) 
              3 MAKE_FUNCTION            0 
              6 LOAD_CONST               6 ((1, 2, 3)) 
              9 GET_ITER             
             10 CALL_FUNCTION            1 
             13 STORE_FAST               0 (x) 

  3          16 LOAD_CONST               5 (5) 
             19 YIELD_VALUE          
             20 POP_TOP              

  4          21 LOAD_FAST                0 (x) 
             24 YIELD_VALUE          
             25 POP_TOP              
             26 LOAD_CONST               0 (None) 
             29 RETURN_VALUE

----------
nosy: +benjamin.peterson
type:  -> behavior

_______________________________________
Python tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue3267>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to