欢迎访问宙启技术站
智能推送

Python中函数的参数传递方式:值传递和引用传递

发布时间:2023-06-12 21:47:19

Python中的函数参数传递方式有两种,分别是值传递和引用传递。这两种传递方式有着相似之处,也有着不同之处,下面将会一一介绍。

一、值传递

值传递指的是将函数参数传递给函数时,传递的是参数的值,而不是参数的内存地址。这就意味着,如果函数内部对参数进行修改,不会影响到传递参数的变量。

例如:

def change_value(num):
    num += 10
    print("函数内部num的值为:", num)

a = 5
print("函数调用前a的值为:", a)
change_value(a)
print("函数调用后a的值为:", a)

在上述代码中,a的初始值为5,函数调用前输出的结果为“函数调用前a的值为:5”。然而,当调用change_value函数时,函数内部对num进行修改,将num的值加10,但是并没有改变a的值。因此,函数调用后输出的结果仍然是“函数调用后a的值为:5”。

二、引用传递

引用传递指的是将函数参数传递给函数时,传递的是参数的内存地址,而不是参数的值。这就意味着,如果函数内部对参数进行修改,会影响到传递参数的变量。

例如:

def change_list(mylist):
    mylist.append(1)
    mylist.append(2)
    mylist.append(3)
    print("函数内部mylist的值为:", mylist)

lst = [4, 5, 6]
print("函数调用前lst的值为:", lst)
change_list(lst)
print("函数调用后lst的值为:", lst)

在上述代码中,lst的初始值为[4, 5, 6],函数调用前输出的结果为“函数调用前lst的值为:[4, 5, 6]”。然而,当调用change_list函数时,函数内部对mylist进行修改,将1、2、3添加到mylist中,这些修改也影响到了lst。因此,函数调用后输出的结果为“函数调用后lst的值为:[4, 5, 6, 1, 2, 3]”。

三、传递不可变类型参数时的特殊情况

Python中有些类型是不可变的,例如整数、浮点数、字符串。当传递这些类型的参数时,就会出现一些特殊的情况。

例如:

def change_num(num):
    num += 1
    print("函数内部num的值为:", num)

a = 1
print("函数调用前a的值为:", a)
change_num(a)
print("函数调用后a的值为:", a)

在上述代码中,a的初始值为1,函数调用前输出的结果为“函数调用前a的值为:1”。然而,当调用change_num函数时,函数内部对num进行修改,将num的值加1,但是并没有改变a的值。因此,函数调用后输出的结果仍然是“函数调用后a的值为:1”。

这是因为,当将一个不可变类型的参数传递给一个函数时,实际上是创建了一个新的值,而不是修改了原有的值。因此,函数内部对参数进行修改,只会影响到传递参数的变量,而不会影响到原有的值。

总结

在Python中,函数参数传递方式有两种,分别是值传递和引用传递。其中,值传递指的是将函数参数传递给函数时,传递的是参数的值,而不是参数的内存地址;引用传递指的是将函数参数传递给函数时,传递的是参数的内存地址,而不是参数的值。当传递不可变类型的参数时,会出现特殊情况,函数内部对参数进行修改只会影响到传递参数的变量,而不会影响到原有的值。了解这些参数传递方式的特点,可以帮助我们更好地理解Python代码的实现过程。