<snip> > One catch with Python nested scopes is that binding a name defaults to > the local scope. You can get around this by using a mutable container, > just as was done with globals before the "global" keyword was added in > version 0.9.4 (1991). The better solution is a new keyword, but adding > keywords is radical surgery. The "nonlocal" keyword, as Peter used, > had to wait for 3.x.
I was playing around with this a bit and arrived at the following surprising (for me at least) result. I thought the global/local/nonlocal keywords could be used to get values from another scope. Though this could also happen implicitly, e.g. if only x = "I am global" is defined and x is used (and not redefined) inside a function, then python still knows this variable inside that function. Is there any way to make this work? (it may not be desirable, though) #Python 3.2.3 (default, Apr 10 2013, 05:29:11) [GCC 4.6.3] on linux2 >>> x = "I am global" >>> def outer(): ... x = "I am nonlocal" ... def inner(): ... x = "I am local" ... print(x) # expecting to print 'I am local' ... nonlocal x ... print(x) # expecting to print 'I am nonlocal' ... global x ... print(x) # expecting to print 'I am global' ... inner() ... <stdin>:6: SyntaxWarning: name 'x' is assigned to before nonlocal declaration <stdin>:8: SyntaxWarning: name 'x' is assigned to before global declaration SyntaxError: name 'x' is nonlocal and global _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor