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函数调用时的参数传递方式是通过值传递。对于不可变对象,传递的是值的副本;对于可变对象,传递的是对象的引用。
