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

Python函数中的参数传递是怎样的?

发布时间:2023-08-03 08:14:30

在Python中,参数传递有两种方式:传值和传引用。在函数调用时,实参传递给形参有可能是传值或者传引用的方式。

1. 传值传递:

当函数调用时,实参的值会被复制到形参中,即在函数内部,形参是实参的拷贝,它们之间互不影响。这意味着,函数内部对形参的修改不会影响到实参的值。

def modify_num(num):
    num += 10

x = 5
modify_num(x)
print(x)  # 输出 5,不会被修改

2. 传引用传递:

在Python中,如果传递的实参是可变对象(如列表、字典、集合等),则函数内部对形参的修改会影响到实参的值。因为实参和形参指向的是同一个对象,它们共享相同的内存地址。

def modify_list(lst):
    lst.append(4)

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # 输出 [1, 2, 3, 4],被修改了

但是,如果传递的实参是不可变对象(如数字、字符串、元组等),则函数内部对形参的修改不会影响到实参的值。因为不可变对象在进行修改时,会创建一个新的对象。

def modify_string(s):
    s += " world"

my_string = "hello"
modify_string(my_string)
print(my_string)  # 输出 "hello",不会被修改

此外,还有一种特殊情况,如果函数内部尝试给传递的不可变对象重新赋值,会创建一个新的局部变量,而不会影响到实参。

def reassign_string(s):
    s = "world"

my_string = "hello"
reassign_string(my_string)
print(my_string)  # 输出 "hello",不会被重新赋值

需要注意的是,在函数调用时,函数内部的实参和形参之间是相互独立的,它们之间的操作不会互相影响。但是传递的实参和形参的可变性会影响到函数内部对参数的修改是否会影响到实参的值。