这里有两种方法。一个修改变量 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]
虽然x
insideswatch
是一个局部变量,因为swatch
被调用
swatch(x) # the global variable x
它指向与同名全局变量相同的列表。
x[:] = ...
改变, 同时仍指向原始列表的内容。因此,这也改变了全局变量指向的值。x
x
x
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
是另一个示例,其中的内容发生了x
变异,但x
仍指向原始列表。因此,改变局部也会x
改变全局x
。