1. 什么是函数传参方式
在Python中,函数参数传递主要有两种方式:传值调用和传引用调用。这两种方式决定了在函数调用时,实参是如何传递给形参的。
2. 传值调用
传值调用是指在函数调用时,将实际参数的值传递给函数的形式参数,而不是将实际参数的地址或引用传递给函数。
当使用传值调用时,函数内部对形参进行修改不会影响实参的值。
2.1 示例
下面以一个简单的例子来说明传值调用:
def change_value(x):
x = 10
a = 5
change_value(a)
print(a) # 输出:5
在这个例子中,函数change_value
接受一个参数x
,并在函数内部将x
赋值为10
。然后在主程序中定义变量a
为5
,并将a
作为实参调用change_value(a)
。最后输出a
的值为5
。
这是因为在传值调用中,函数内部对形参进行修改不会影响到实参的值。
3. 传引用调用
传引用调用是指在函数调用时,将实际参数的引用(内存地址)传递给函数的形式参数。
当使用传引用调用时,函数内部对形参进行修改会影响实参的值。
3.1 示例
下面以一个简单的例子来说明传引用调用:
def change_value(lst):
lst.append(3)
my_list = [1, 2]
change_value(my_list)
print(my_list) # 输出:[1, 2, 3]
在这个例子中,函数change_value
接受一个参数lst
,并在函数内部使用append()
方法向lst
列表添加一个元素3
。然后在主程序中定义一个列表my_list
为[1, 2]
,并将my_list
作为实参调用change_value(my_list)
。最后输出my_list
的值为[1, 2, 3]
。
这是因为在传引用调用中,函数内部对形参进行修改会影响到实参的值。
4. 参数传递方式的选择
在Python中,默认情况下,函数参数传递方式是传值调用。
但对于可变类型的参数(如列表、字典等),可以通过传引用调用来实现更改实参的值。
4.1 示例
下面以一个简单的例子来说明可变类型参数的传引用调用:
def change_value(lst):
lst[0] = 10
my_list = [1, 2]
change_value(my_list)
print(my_list) # 输出:[10, 2]
在这个例子中,函数change_value
接受一个参数lst
,并在函数内部将lst
列表的第一个元素赋值为10
。然后在主程序中定义一个列表my_list
为[1, 2]
,并将my_list
作为实参调用change_value(my_list)
。最后输出my_list
的值为[10, 2]
。
这是因为列表是可变类型的数据,函数内部对形参进行修改会影响到实参的值。
4.2 参数传递方式的选择
在实际编程中,我们需要根据具体的需求决定使用哪种参数传递方式。
如果希望函数不改变实参的值,可以使用传值调用;如果希望函数能够改变实参的值,可以使用传引用调用。
此外,还可以考虑使用返回值来实现函数对实参的影响。
5. 总结
本文介绍了Python函数参数传递的两种方式:传值调用和传引用调用。
通过示例代码的演示,可以清楚地看到传值调用和传引用调用的不同之处。在使用时,需要根据实际需求选择适合的参数传递方式。
最后,需要特别注意可变类型参数的传引用调用,可以实现对实参的改变。