前言
Python中的函数参数传递机制都是 “值传递”。值传递就是指将实际的参数对象复制一份传入,从而可使参数本身不受影响
正文:
def swap(a, b):
# 实现a,b的交换
a, b = b, a
print("a的值为:", a, 'b的值为:', b)
a = 1
b = 2
swap(a, b)
print('a为', a, 'b为', b)
当在主程序中调用swap()函数时,系统分别为主程序和swap()函数分配两块栈区,用于保存他们的局部变量。将主程序中的a、b变量的值分别赋值给swap()函数栈区中的a、b参数。此时,系统存在两个a变量,b比变量,只是存在的栈区不同。由此程序可知,Python只是把a, b的值传入进去,并未对a,b的值进行真正的修改,就相当于把a,b复制了一份,然后传入了swap函数,该复制品只在swap函数体内有效。这就是值传递的实质:当系统开始执行函数时,系统对形参执行初始化,就是把实参变量的值付给函数的形参变量。
若想通过函数来修改传入参数的值,则可以把这些数据包装成列表或者字典等可变对象再传入函数中
例如:
def test(nums):
a = nums[0]
nums[0] = nums[1]
nums[1] = a
my_list = [1, 2, 3, 4, 5]
test(my_list)
print(my_list)
此时,成功实现了对传入参数的修改,但值得注意的是,此时不是把my_list对象直接传进去!系统还是创建了一个变量,不过这是一个引用变量(也就是一个指针)当需要使用my_list时,通过该引用变量,寻找到my_list的地址,从而进行修改。