intricated functions: how to share a variable
Peter Otten
__peter__ at web.de
Wed Aug 5 06:46:28 EDT 2009
TP wrote:
> Hi everybody,
>
> See the following example:
>
> #########
> def tutu():
>
> def toto():
>
> print a
> a = 4
> print a
>
> a=2
> toto()
>
> tutu()
> ##########
>
> I obtain the following error:
> "UnboundLocalError: local variable 'a' referenced before assignment"
>
> This is because Python looks in the local context before looking in the
> global context.
>
> The use of "global a" in toto() does not help because global allows to
> force Python to look for the variable at the module level.
>
> So, how to share a variable between intricated functions?
This limitation is removed in Python 3 with the 'nonlocal' statement:
>>> def outer():
... def inner():
... nonlocal a
... print(a)
... a = 4
... print(a)
... a = 2
... inner()
... print(a)
...
>>> outer()
2
4
4
Peter
More information about the Python-list
mailing list