对于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()
为什么变量类型应该有所不同?这和指针有关吗?
答案 0 :(得分:1)
它与指针没有关系,它与列表的使用方式有关,当您执行list [1] = x时,这是一个成员分配,实际上是一个“方法调用”。基本上,当您更改列表中成员的值时,它会执行方法调用,该方法可以在全局名称空间中找到列表的名称。
答案 1 :(得分:0)
在第一个示例中,“ a”作为参数传递,因此您可以正常访问或更改它。在第二个示例中,对“ a”的任何更改仅保留在内部函数中。要解决此问题,您可以将“ a”设置为全局:
def foo1():
a = 1
def foo2():
global a
a = -10
foo2()
return a
c = foo1()