如何使变量在另一个函数中可访问

时间:2019-06-14 21:34:51

标签: python scope reference

考虑以下示例:

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轻松实现这一点,但是有没有办法在函数内部做到这一点?

2 个答案:

答案 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