外部函数变量的范围?

Scope of an outer function variable?

我对 Python 中外部函数变量相对于内部函数的范围感到困惑。

好像如果外层函数中的变量是列表或数组,内层函数可以改变它,而如果是标量则不能。例如,以下代码给出 c = [0,-10].

的输出
def foo1():
    a = [0,1]

    def foo2():
        a[1] = -10

    foo2()
    return a


c = foo1()

而下面的代码给出了 c = 1。

def foo1():
    a = 1

    def foo2():
        a = -10

    foo2()
    return a


c = foo1()

为什么变量的类型会有所不同?这与指针有关吗?

在第一个示例中,“a”作为参数传入,因此您可以正常访问或更改它。在第二个示例中,对“a”的任何更改仅保存在内部函数中。要解决此问题,您可以将“a”设为全局:

def foo1():
    a = 1

    def foo2():
        global a
        a = -10

    foo2()
    return a


c = foo1()

这跟指针没有任何关系,它是如何使用列表的,当你做list[1] = x时,这是一个成员赋值,实际上是一个“方法调用”。基本上,当您更改列表中成员的值时,它会执行一个方法调用,可以在全局名称 space.

中找到列表的名称