这里有两种方法。一个修改变量 x,另一个不修改。你能解释一下这是为什么吗?
x = [1,2,3,4]
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
switch(0,1,x)
print(x)
[2,1,3,4]
def swatch(x):
x = [0,0,0,0]
swatch(x)
print(x)
[2,1,3,4]
这里有两种方法。一个修改变量 x,另一个不修改。你能解释一下这是为什么吗?
x = [1,2,3,4]
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
switch(0,1,x)
print(x)
[2,1,3,4]
def swatch(x):
x = [0,0,0,0]
swatch(x)
print(x)
[2,1,3,4]
函数定义
def swatch(x):
定义x为局部变量。
x = [0, 0, 0, 0]
将局部变量重新分配x给新列表。这不会影响x同名的全局变量。
您可以x从以下参数中删除swatch:
def swatch():
x = [0, 0, 0, 0]
但是当 Python 在函数定义中遇到赋值时,例如
x = [0, 0, 0, 0]
Python 默认会考虑x一个局部变量。为其赋值x不会影响全局变量x.
要告诉 Python 你希望x成为全局变量,你需要使用global声明:
def swatch():
global x
x = [0,0,0,0]
swatch()
但是,在这种情况下,由于x是mutable,您可以这样定义swatch:
def swatch(x):
x[:] = [0,0,0,0]
虽然xinsideswatch是一个局部变量,因为swatch被调用
swatch(x) # the global variable x
它指向与同名全局变量相同的列表。
x[:] = ...改变, 同时仍指向原始列表的内容。因此,这也改变了全局变量指向的值。xxx
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
是另一个示例,其中的内容发生了x变异,但x仍指向原始列表。因此,改变局部也会x改变全局x。