Python becoming less Lisp-like

Terry Reedy tjreedy at udel.edu
Tue Mar 22 15:04:51 EST 2005


"Antoon Pardon" <apardon at forel.vub.ac.be> wrote in message 
news:slrnd407gs.20i.apardon at rcpc42.vub.ac.be...
> 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






More information about the Python-list mailing list