"Antoon Pardon" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > And does this code object know which non-local names are on an > intermediate level and which are global?
Yes (from 2.2): >>> import dis >>> x = 1 >>> def f(): ... y = 2 ... def g(): ... z = 3 ... print x,y,z ... return g ... >>> dis.dis(f) 0 SET_LINENO 1 3 SET_LINENO 2 6 LOAD_CONST 1 (2) 9 STORE_DEREF 0 (y) 12 SET_LINENO 3 15 LOAD_CLOSURE 0 (y) 18 LOAD_CONST 2 (<code object g at 008BA060, file "<stdin >", line 3>) 21 MAKE_CLOSURE 0 24 STORE_FAST 1 (g) 27 SET_LINENO 6 30 LOAD_FAST 1 (g) 33 RETURN_VALUE 34 LOAD_CONST 0 (None) 37 RETURN_VALUE >>> g = f() >>> dis.dis(g) 0 SET_LINENO 3 3 SET_LINENO 4 6 LOAD_CONST 1 (3) 9 STORE_FAST 0 (z) 12 SET_LINENO 5 15 LOAD_GLOBAL 1 (x) 18 PRINT_ITEM 19 LOAD_DEREF 0 (y) # intermediate value 22 PRINT_ITEM 23 LOAD_FAST 0 (z) 26 PRINT_ITEM 27 PRINT_NEWLINE 28 LOAD_CONST 0 (None) 31 RETURN_VALUE Terry J. Reedy -- http://mail.python.org/mailman/listinfo/python-list