On Thu, 6 May 2010 22:15:34 +0100
"Alan Gauld" <[email protected]> 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 - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor