【问题标题】:How to make variable accessible inside another function如何使变量在另一个函数中可访问
【发布时间】: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,因此它默认为本地

标签: python scope reference


【解决方案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

【讨论】:

  • 应该注意它只在 Python 3 中,因为 OP 没有说明他们正在使用哪个版本。
【解决方案2】:

您可以通过以下方式进行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多