locals() and globals()

Kay Schluehr kay.schluehr at gmx.net
Sat Oct 14 12:12:54 EDT 2006


Paolo Pantaleo wrote:
> Hi
>
> this exaple:
>
> def lcl():
>     n=1
>     x=locals()
>     x["n"]=100
>     print "n in lcl() is:" +str(n)
>     #This will say Name error
>     #x["new"]=1
>     #print new
>
>
> n=1
> x=globals()
> x["n"]=100
> print "gobal n is:" +str(n)
> x["new"]=1
> print "new is:" +str(new)
> lcl()
>
> produces
>
> gobal n is:100
> new is:1
> n in lcl() is:1
>
> shouldn't be n in lcl() 100 too?
>
> why accessing the names dictionary globals() and locals() gives
> different results?

Python is statically scoped. The name bindings are fixed at compile
time. Hence you can't achieve dynamic scoping by using the locals()
dictionary and add new names to the locals() which might eventually be
used as local variables in the body of the function. The function still
controls its own state and does not permit delegating state changes via
locals(). That's what objects are for.




More information about the Python-list mailing list