如何在Python函数中按引用传递参数?

如何在Python函数中按引用传递参数?

在Python中函数可以按值传递参数或按引用传递参数。默认情况下,参数按值传递,也就是说,函数内部对参数的修改不会影响到函数外部的实参。但是,有时候我们需要在函数中修改外部实参的值,这时候就需要按引用传递参数。下面,我们就来看看如何在Python函数中按引用传递参数。

阅读更多:Python 教程

什么是按引用传递参数?

在Python中,按引用传递参数指的是将实参的引用传递给函数,这样函数内部对实参的修改会影响到函数外部的实参。

下面我们来看一个例子:

def modify_list(my_list):
    my_list.append(4)
    print(my_list)

lst = [1, 2, 3]
modify_list(lst)
print(lst)

输出:

[1, 2, 3, 4]
[1, 2, 3, 4]

可以看出,函数内部对列表的修改影响到了函数外部的列表。这就是按引用传递参数的效果。在传递参数时,Python会将实参的引用传递给函数,函数内部操作的是这个引用指向的对象,因此实现了按引用传递参数。

如何实现按引用传递参数?

默认情况下,Python函数是按值传递参数的,如果要实现按引用传递参数,需要使用可变对象作为参数,并且在函数内部对这个可变对象进行修改。

可变对象包括列表、字典、集合等,不可变对象包括数字、字符串、元组等。

例如,下面的代码实现了将列表中的元素都加1的功能:

def add_one(my_list):
    for i in range(len(my_list)):
        my_list[i] += 1

lst = [1, 2, 3]
add_one(lst)
print(lst)

输出:

[2, 3, 4]

我们还可以通过给函数的参数加上***来实现按引用传递参数。

加上*表示传递可变数量的位置参数,加上**表示传递可变数量的关键字参数。这样,在函数内部对这些参数的修改会影响到函数外部的实参。

例如,下面的代码实现了将所有位置参数都平方的功能:

def square(*args):
    for i in range(len(args)):
        args[i] = args[i] ** 2

lst = [1, 2, 3]
square(*lst)
print(lst)

a = 2
b = 3
c = 4
square(a, b, c)
print(a, b, c)

输出:

[1, 2, 3]
2 3 4

从输出可以看出,函数内部的修改并没有影响到函数外部的实参。这是因为要按引用传递参数,需要使用可变对象作为参数。

总结

Python函数默认是按值传递参数的,如果要实现按引用传递参数,需要使用可变对象作为参数,并且在函数内部对这个可变对象进行修改。可变对象包括列表、字典、集合等,不可变对象包括数字、字符串、元组等。另外,还可以通过给函数的参数加上***来实现按引用传递参数。加上*表示传递可变数量的位置参数,加上**表示传递可变数量的关键字参数。这样,在函数内部对这些参数的修改会影响到函数外部的实参。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程