On Thu, 6 May 2010 22:15:34 +0100 "Alan Gauld" <alan.ga...@btinternet.com> wrote:
> As others have pointed out you are returning a reference not a value. Yes. (I have said that, too.) But still there is a mystery for me. Better explained byt the following: x = 0 ; print id(x) # an address def f() : print x # 0 x = 1 ; print id(x) # another one f() # 1 This shows, I guess, that the reference of the upvalue x is *not* an address. But the key (maybe the name itself ?) used by python to lookup a symbol's value, in a given scope, at runtime. Indeed f must find its upvalue in the global scope. Note the scope must also be referenced: def f(): # not the global scope x = 0 def g(): print x x = 1 return g # global scope f()() # 1 I guess the above example also shows that upvalues can be "finalised", since here the scope is lost xwhen f runs. Does anyone know if this reasoning is correct, and how this is done? All of this mechanics looks very complicated. I would be happy with setting func attributes like x here as func attributes directly & explicitely: def f(): def g(): print g.x g.x = 1 ... which are still modifiable --explicitely. Denis ________________________________ vit esse estrany ☣ spir.wikidot.com _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor