Given:
def f():
x = 0
def g():
h()
def h():
x += 1
print(x)
g()
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in f
File "<stdin>", line 4, in g
File "<stdin>", line 6, in h
UnboundLocalError: local variable 'x' referenced before assignment
>>>
How can I make h
see the x
variable?
Thanks.
EDIT
Should have mentioned it earlier, I am using Python 2.7.3
You can make x
a function attribute:
def f():
f.x = 0
def g():
h()
def h():
f.x += 1
print(f.x)
g()
Also, as of Python 3, you can use nonlocal
keyword.
If you're using Python 3, you use the nonlocal
keyword. Put nonlocal x
at the beginning of function h
. If you're using Python 2.x, a workaround is making x
a list with one element, so you can modify it:
def f():
x = [0]
def g():
h()
def h():
x[0] += 1
print x[0]
g()
f()
In Python 3 just use nonlocal
:
def f():
x = 0
def g():
h()
def h():
nonlocal x
x += 1
print(x)
g()
f()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With