深入理解Python函数参数传递机制
发布时间:2023-10-01 09:59:47
Python中函数参数的传递机制是值传递。在函数调用时,实参的值会被复制到形参中,称为“传值调用”。
在Python中,函数参数可以分为可变参数和不可变参数。
不可变参数包括数字、字符串和元组,它们在传递过程中不会发生改变。
可变参数包括列表和字典,它们在传递过程中是可以被改变的。
对于不可变参数,传递的是对象的值的一个副本。如果在函数内部修改了该参数的值,实际上是创建了一个新的对象,并把新对象的引用赋给了函数内部的变量,而外部的变量仍然指向原有的对象。
对于可变参数,传递的是对象的引用。如果在函数内部修改了该参数的值,外部的变量也会受到影响。
下面通过几个例子来进一步理解函数参数的传递机制。
例1:
def change_int(a):
a = 10
b = 20
change_int(b)
print(b) # 输出结果为20
在这个例子中,变量b是一个不可变的参数,它的值是20。在函数change_int中,形参a被赋值为10,但这并不会影响外部的变量b,因为不可变参数的值是不会改变的。
例2:
def change_list(lst):
lst[0] = 10
my_list = [1, 2, 3]
change_list(my_list)
print(my_list) # 输出结果为[10, 2, 3]
在这个例子中,变量my_list是一个可变的参数,它是一个列表。在函数change_list中,形参lst引用了外部的列表my_list,并且修改了列表的 个元素的值。由于可变参数的传递是传递引用,所以外部的变量my_list也受到了影响。
例3:
def add_element(lst):
lst.append(4)
my_list = [1, 2, 3]
add_element(my_list)
print(my_list) # 输出结果为[1, 2, 3, 4]
在这个例子中,函数add_element向列表my_list中添加了一个新的元素。由于可变参数的传递是传递引用,所以外部的变量my_list也受到了影响。
通过上面的例子,可以看到Python函数的参数传递机制是值传递,但对于可变参数来说,传递的是引用。这就意味着,在函数内部对可变参数的修改会影响到外部的变量。而对于不可变参数来说,函数内部的修改只是针对局部变量,不会影响外部的变量。
