考虑以下示例:
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
列表res
可以由fun2
访问,但是val
无法访问。我知道list
是可变的,而int
不是可变的,但是有没有办法使val
也可以访问fun2
?在课堂上,我可以使用self.val
轻松实现这一点,但是有没有办法在函数内部做到这一点?
答案 0 :(得分:1)
使用nonlocal
statement使内部函数内部的封闭函数中定义的变量可用,例如:
def func1():
val = 1
res = [1]
def fun2():
nonlocal val
print(res)
print(val)
val = 2
fun2()
print(val)
func1()
另请参阅:earlier SO question。
答案 1 :(得分:0)
您可以通过以下方式进行操作:
def func1():
val = 1
res = [1]
def fun2(val=val, res=res):
print(res)
print(val)
val = 2
return val
val = fun2()
print(val)
然后输出
>>> func1()
[1]
1
2