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

Python函数参数传递详解

发布时间:2023-12-02 23:08:32

Python中的函数参数传递有两种方式,分别是按值传递和按引用传递。

按值传递是指将实际参数的值复制给形式参数,在函数内部修改形式参数的值不会影响实际参数的值。在函数内部,对形式参数的修改只影响形式参数本身。

例如,定义一个函数add,接受两个参数a和b,然后将a和b相加并返回结果。在调用函数的时候,传递的参数是两个整数或者浮点数。这时,传递的值会被复制给形式参数,在函数内部对形式参数的修改不会影响实际参数。

def add(a, b):
    a += b
    return a

x = 5
y = 3
result = add(x, y)
print(result)  # 输出8
print(x)  # 输出5

按引用传递是指将实际参数的引用传递给形式参数,函数内部对形式参数的修改会影响实际参数的值。在函数内部,对形式参数的修改会同时修改实际参数。

例如,定义一个函数modify_list,接受一个列表作为参数,然后将列表的元素都加1。在调用函数的时候,传递的参数是一个列表。这时,传递的引用会被复制给形式参数,在函数内部对形式参数的修改会同时修改实际参数。

def modify_list(lst):
    for i in range(len(lst)):
        lst[i] += 1

numbers = [1, 2, 3, 4, 5]
modify_list(numbers)
print(numbers)  # 输出[2, 3, 4, 5, 6]

需要注意的是,不可变对象(如数字、字符串、元组)作为参数传递给函数时,实际上是按值传递的。因为不可变对象在内存中是不可改变的,而函数内部对形式参数的修改只会影响形式参数本身,并不会改变实际参数的值。

而可变对象(如列表、字典、集合)作为参数传递给函数时,实际上是按引用传递的。因为可变对象在内存中是可以改变的,函数内部对形式参数的修改会同时影响实际参数的值。

总结起来,Python函数参数传递的原则是不管是按值传递还是按引用传递,都是将实际参数的值或引用传递给形式参数。按值传递是复制值,按引用传递是复制引用。按值传递的对象是不可改变的,按引用传递的对象是可改变的。