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

Python函数调用时的参数传递方式

发布时间:2023-09-08 12:34:54

在Python中,函数调用时的参数传递方式是通过值传递。这意味着函数接收到的参数是原始值的复制品,而不是原始值本身。

当我们调用一个函数并传递参数时,Python会将这些参数的值复制到函数的形式参数中。这意味着函数内部的操作不会影响到原始参数的值。

对于不可变对象(比如数字、字符串和元组),传递的是值的副本。这意味着在函数内部修改参数的值不会影响到原始值。

def modify(x):
    x = x + 1
    print("Inside the function: ", x)

num = 10
print("Before function call: ", num)
modify(num)
print("After function call: ", num)

运行上述代码,函数内部的修改不会影响到原始的num变量的值。输出结果如下所示:

Before function call:  10
Inside the function:  11
After function call:  10

对于可变对象(比如列表和字典),传递的是对象的引用。这意味着在函数内部修改对象的属性或元素会影响到原始对象。

def modify_list(lst):
    lst.append(4)
    print("Inside the function: ", lst)

my_list = [1, 2, 3]
print("Before function call: ", my_list)
modify_list(my_list)
print("After function call: ", my_list)

运行上述代码,函数内部对列表进行的修改会反映在原始列表上。输出结果如下所示:

Before function call:  [1, 2, 3]
Inside the function:  [1, 2, 3, 4]
After function call:  [1, 2, 3, 4]

需要注意的是,虽然函数在传递可变对象时可以修改对象的属性或元素,但如果在函数内部给可变对象赋予新值,就会创建一个新的局部对象,而不会影响到原始对象。

此外,还有一种特殊情况是传递可变对象的副本。这可以通过切片([:])操作来实现:

def modify_list_copy(lst):
    lst = lst[:]  # 创建新的副本
    lst.append(4)
    print("Inside the function: ", lst)

my_list = [1, 2, 3]
print("Before function call: ", my_list)
modify_list_copy(my_list)
print("After function call: ", my_list)

运行上述代码,函数内部对副本的修改不会影响到原始列表。输出结果如下所示:

Before function call:  [1, 2, 3]
Inside the function:  [1, 2, 3, 4]
After function call:  [1, 2, 3]

综上所述,Python函数调用时的参数传递方式是通过值传递。对于不可变对象,传递的是值的副本;对于可变对象,传递的是对象的引用。