Python函数调用传递参数的方式分为传值和传引用两种方式。在Python中默认采用的是传对象引用的方式。
传值是指在函数调用时将实际参数的值复制一份传递给形式参数,函数对形式参数的修改不会影响到实际参数。而对于传引用方式,函数调用时传递的是实际参数的引用,函数对形参的修改也将影响到实参。
在Python中,基础类型比如int、float等是属于传值参数,在函数内部修改形参的值不会影响到实参本身。而像列表、字典、集合等属于传引用类型,函数内部对形参的修改会直接改变实参的值。
下面我们具体来看例子:
- 传值类型示例
def func(a):
a += 1
return a
num = 1
result = func(num) # num传入函数func,函数返回正确的结果2
print(num, result) # 输出1,2
在上面的例子中,实参num的值是1,调用函数func时将num的值复制了一份传递给形参a,形参a的值是2,函数对形参a的修改不会影响到实参num的值。所以最后输出的结果是1和2。
- 传引用类型示例
def func(data):
data[0] = 1
data[1] = 2
data = [0, 0]
func(data)
print(data) # 输出[1, 2]
在上述代码示例中,传入的实参data是一个列表类型,函数func对它进行了修改,将列表的第一个和第二个元素分别改为了1和2,由于Python函数是通过引用来传递对象的,因此对于传入的列表对象data修改后,实参对象的值也被改变。
总结来说,Python中的参数传递是按照对象引用传递的,因此对于传入函数的变量,如果是可变类型(如列表、字典)的话,可以在函数内部对它们进行修改,这样会直接改变实参的值;而对于不可变类型(如数值、字符串等),函数内部修改的话只是创建了一个新的临时变量,并不会直接影响到实参的值。