On Mar 25, 1:04 pm, Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: > On 25 Mar 2007 03:59:52 -0700, [EMAIL PROTECTED] wrote: > > > > >Hello, > > >when I execute the following code (python 2.5) > > >def f(x): > > def g(): > > return x > > return g > > >print f(1) > >print f(2) > > >I get an output like > > ><function g at 0x00AFC1F0> > ><function g at 0x00AFC1F0> > > >So according to print I get the same function object returned at both > >calls. > >That's surprising, I would expect to get two distinct function objects > >because their func_closure attribute has to be different. And indeed, > >if I do > > >print f(1) is f(2) > > >instead, it prints False. Even more confusing, if I do > > >g1 = f(1) > >g2 = f(2) > >print g1 > >print g2 > > >I get something like > > ><function g at 0x00AFC1B0> > ><function g at 0x00AFC1F0> > > >ie. two distinct function objects are printed. > > >What's happening here? > >Some clever optimization reusing function objects in special cases or > >what ...? > > They're _not_ the same function object, just like the `is' test told you. > They just happen to have been allocated at the same memory address. > > Jean-Paul
ah yes, I see, thanks -- http://mail.python.org/mailman/listinfo/python-list