In article <d020e332-f2f2-4a82-ae1b-2ae071211...@n3g2000yqb.googlegroups.com>, Russell Warren <russandheat...@gmail.com> wrote: > >def test4(): > print "running test4..." > x = 1 > def innerFunc(): > print "inner locals():", > print "%s" % locals() # how is x in locals in this case?? > print x > x = 2 #ONLY ADDED LINE TO TEST3 > innerFunc() > print "x left as %s\n" % x > >In this case I get "UnboundLocalError: local variable 'x' referenced >before assignment". I think this means that the compiler (prior to >runtime) inspected the code, determined I will do an assignment, >decided _not_ to bring the parent's x into the local namespace, and as >a result caused the unbound name problem at runtime.
Bingo! >It seems that the parent's "x" is brought directly into the local >namespace (when appropriate), rather than the namespace lookup just >moving up the hierarchy when not found. This is confusing to me and >is making me question my understanding of namespace lookups. Are >nested scopes a special case where the lookup is handled differently? > >What if I want to change the value of the parent's "x"? test4 implies >that I can't. You need Python 3.x and the "nonlocal" keyword. -- Aahz (a...@pythoncraft.com) <*> http://www.pythoncraft.com/ [on old computer technologies and programmers] "Fancy tail fins on a brand new '59 Cadillac didn't mean throwing out a whole generation of mechanics who started with model As." --Andrew Dalke -- http://mail.python.org/mailman/listinfo/python-list