Python 如何在另一个函数中访问变量
考虑这个例子:Python 如何在另一个函数中访问变量,python,scope,reference,Python,Scope,Reference,考虑这个例子: def func1(): val = 1 res = [1] def fun2(): print(res) print(val) val = 2 fun2() print(val) func1() 它引发了以下异常: UnboundLocalError:赋值前引用了局部变量“val” 列表res可以通过fun2访问,但是val不能。我知道list是可变的,int不是,但是有没有办法让v
def func1():
val = 1
res = [1]
def fun2():
print(res)
print(val)
val = 2
fun2()
print(val)
func1()
它引发了以下异常:
UnboundLocalError:赋值前引用了局部变量“val”
列表
res
可以通过fun2
访问,但是val
不能。我知道list
是可变的,int
不是,但是有没有办法让val
也可以被fun2
访问?在一个类中,我可以通过self.val
轻松实现这一点,但有没有办法在函数中实现这一点?您可以通过以下方式实现:
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
使用使封闭函数中定义的变量在内部函数中可访问,如下所示:
def func1():
val = 1
res = [1]
def fun2():
nonlocal val
print(res)
print(val)
val = 2
fun2()
print(val)
func1()
另请参见:。这是因为
val=2
生成了一个名为val
的新变量(fun2的本地变量)。如果这是python 3,您可以将nonlocal val
添加到fun2
定义的顶部。可变性与此无关。问题是您已将其分配给val
,因此它默认为local。请注意,它仅在Python3中出现,因为OP没有说明它们使用的是哪个版本。