On Sat, 03 Nov 2007 07:18:17 +0000, Sullivan WxPyQtKinter wrote: > I am confused by the following program: > > def f(): > print x > x=12345 > f() > > result is: >>>> > 12345
If python can't discover x in your current scope and you do not bind to it there, it will automatically access that global name x. > however: > def f(): > print x > x=0 > > x=12345 > f() > > result is: > Traceback (most recent call last): > File "...\test.py", line 5, in ? > f() > File "...\test.py", line 2, in f > print x > UnboundLocalError: local variable 'x' referenced before assignment Here, you *do* assign to x in this scope so this is essentially the same as the following (without any function scope):: print x x = 12345 This can't work since you haven't used x when you try to print it. You can make this work using the `global` statement:: >>> def foo(): ... global x ... print x ... x = 0 ... >>> x = 12345 >>> print x 12345 >>> foo() 12345 >>> print x 0 See more in the `lexical reference about the global statement <http:// docs.python.org/ref/global.html>. HTH, Stargaming -- http://mail.python.org/mailman/listinfo/python-list