It\'s ok to get and print the outer function variable a
def outer():
a = 1
def inner():
print a
It\'s also ok
A generally cleaner way to do this would be:
def outer():
a = 1
def inner(b):
b += 1
return b
a = inner(a)
Python allows a lot, but non-local variables can be generally considered as "dirty" (without going into details here).
In Python 3 you can do this with the nonlocal
keyword. Do nonlocal a
at the beginning of inner
to mark a
as nonlocal.
In Python 2 it is not possible.
Workaround for Python 2:
def outer():
a = [1]
def inner():
a[0] += 1
print a[0]