Can local function access local variables in main program?

Stargaming stargaming at gmail.com
Sat Nov 3 08:39:20 CET 2007


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



More information about the Python-list mailing list