外部函数变量的范围?
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.
中找到列表的名称
我对 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.
中找到列表的名称