Python 函数传值方法
Python 中,函数的参数传递方式有两种:
- 值传递(传递对象的值)
- 引用传递(传递对象的引用)
在 Python 中,所有的变量都可以看作是对象,因此参数都是对象的传递方式。在 Python 中,有可变对象和不可变对象之分。
不可变对象传递
Python 中的不可变对象包括数字、字符串和元组。不可变对象传递时,相当于传递对象拷贝的值,原始对象不会受到影响。
具体来说,当函数的参数是不可变对象时,函数内部对该参数进行操作不会影响原始对象。这是因为 Python 中不可变对象的值是不允许被修改的。
下面通过代码实例来说明不可变对象传递:
def update_number(num):
num += 10
print(num)
n = 5
update_number(n)
print(n)
代码说明:
- 首先定义一个函数
update_number()
,该函数的参数num
是一个数字变量。函数内部将num
加上 10 并输出结果。 - 在主程序中,定义一个数字变量
n
等于 5,并调用update_number()
函数。输出结果为 15。 - 接着在主程序中再次输出
n
的值,仍然是 5。
可以看出,在 update_number()
函数内部对 num
进行操作不会影响外部原始的 n
变量。
可变对象传递
Python 中的可变对象包括列表和字典。可变对象传递时,相当于传递对象的引用,原始对象可能受到影响。
具体来说,当函数的参数是可变对象时,函数内部对该参数进行的修改会影响原始对象,因为这个参数实际上是该对象的引用。
下面通过代码实例来说明可变对象传递:
def update_list(lst):
lst.append(4)
print(lst)
l = [1, 2, 3]
update_list(l)
print(l)
代码说明:
- 首先定义一个函数
update_list()
,该函数的参数lst
是一个列表。函数内部将值 4 添加到列表lst
中,并输出整个列表。 - 在主程序中,定义一个列表变量
l
并赋值为[1, 2, 3]
,然后调用update_list()
函数。输出结果是[1, 2, 3, 4]
。 - 接着在主程序中输出
l
的值,结果是[1, 2, 3, 4]
。
可以看出,update_list()
函数内部对列表 lst
进行操作,实际上是在原始列表 l
上进行的修改,因为 lst
是 l
的引用。
总结
在 Python 中,函数的参数传递方式有值传递和引用传递两种。对于不可变对象的参数,采用的是值传递方式,即传递对象的拷贝值。对于可变对象的参数,采用的是引用传递方式,即传递对象的引用,因此在函数内部对该参数进行的修改实际上是在原始对象上进行的修改。