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. -- http://mail.python.org/mailman/listinfo/python-list