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

Reply via email to