【发布时间】:2019-10-29 12:26:13
【问题描述】:
考虑这个例子:
def func1():
val = 1
res = [1]
def fun2():
print(res)
print(val)
val = 2
fun2()
print(val)
func1()
它引发了以下异常:
UnboundLocalError: local variable 'val' referenced before assignment
fun2 可以访问列表res,但val 不能。我知道list 是可变的,而int 不是,但是有没有办法让fun2 也可以访问val?在课堂上,我可以使用self.val 轻松实现这一点,但是有没有办法在函数中做到这一点?
【问题讨论】:
-
这是因为
val = 2创建了一个新的(对于 fun2 而言是本地的)变量,名为val。删除该行,它就可以工作了。 -
或者如果这是python 3,你可以在
fun2定义的顶部添加nonlocal val。 -
可变性无关紧要。问题是您已分配给
val,因此它默认为本地