我有以下代码:
>>> def f(v=1):
... def ff():
... print v
... v = 2
... ff()
...
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in f
File "<stdin>", line 3, in ff
UnboundLocalError: local variable 'v' referenced before assignment
我理解为什么会出现此消息(Python variable scope question),但在这种情况下如何使用v
变量? global v
在这种情况下不起作用。
答案 0 :(得分:6)
在Python 3.x中,您可以使用nonlocal
:
def f(v=1):
def ff():
nonlocal v
print(v)
v = 2
ff()
在Python 2.x中,没有简单的解决方案。黑客攻击是使v
成为一个列表:
def f(v=None):
if v is None:
v = [1]
def ff():
print v[0]
v[0] = 2
ff()
答案 1 :(得分:1)
你还没有将v传递给内部函数ff。它在您声明时创建自己的范围。这应该在python 2.x中运行:
def f(v=1):
def ff(v=1):
print v
v = 2
ff(v)
但是对v = 2
的赋值调用在其他函数调用中不会持久。