Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在另一个函数中访问变量_Python_Scope_Reference - Fatal编程技术网

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没有说明它们使用的是哪个版本。