nested functions
Kent Johnson
kent at kentsjohnson.com
Thu Jun 15 16:12:19 EDT 2006
Fredrik Lundh wrote:
> George Sakkis wrote:
>
>> It shouldn't come as a surprise if it turns out to be slower, since the
>> nested function is redefined every time the outer is called.
>
> except that it isn't, really: all that happens is that a new function object is created from
> prebuilt parts, and assigned to a local variable. it's not slower than, say, a method call.
Interesting. So func_code for a nested function is created when the
module is compiled, and stuck in a new function object when the
definition is executed. Like George, I always assumed that the body of
the nested function was compiled when the outer function was executed,
but that doesn't really make any sense - the *code* for the inner
function is static, just the environment changes (globals(), closure).
dis.dis reveals all:
In [10]: def g():
....: def h():
....: print 'foo'
....: return h
....:
In [11]: dis.dis(g)
2 0 LOAD_CONST 1 (<code object h at 00E8D960,
file "<ipython console>", line 2>)
3 MAKE_FUNCTION 0
6 STORE_FAST 0 (h)
4 9 LOAD_FAST 0 (h)
12 RETURN_VALUE
Thanks Fredrik!
Kent
More information about the Python-list
mailing list