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

Python函数中的参数传递方式

发布时间:2023-12-03 02:22:04

在Python函数中,参数传递可以通过值传递和引用传递两种方式进行。

1. 值传递:

值传递是指将实参的值复制给形参,函数中对形参的修改不会影响到实参的值。在进行值传递时,传递的是实参的副本,即函数内部使用的是形参的副本,不会改变实参本身的值。示例代码如下:

def change_number(num):
    num = 10
    print("num inside the function:", num)

num = 5
change_number(num)
print("num outside the function:", num)

输出结果为:

num inside the function: 10
num outside the function: 5

在上述代码中,函数change_number接收一个形参num,将其值修改为10,并打印修改后的值。在调用函数时,传递了实参num的副本,函数中对形参的修改不会影响到实参num的值,因此在函数外部打印的num还是原来的值5。

2. 引用传递:

引用传递是指将实参的引用(地址)传递给形参,函数中对形参的修改会影响到实参的值。在进行引用传递时,传递的是实参的引用,即函数内部使用的是实参的引用,对形参的修改会反映到实参上。示例代码如下:

def change_list(my_list):
    my_list.append(4)
    print("my_list inside the function:", my_list)

my_list = [1, 2, 3]
change_list(my_list)
print("my_list outside the function:", my_list)

输出结果为:

my_list inside the function: [1, 2, 3, 4]
my_list outside the function: [1, 2, 3, 4]

在上述代码中,函数change_list接收一个形参my_list,将其末尾添加一个元素4,并打印修改后的列表。在调用函数时,传递了实参my_list的引用,函数中对形参的修改会影响到实参my_list的值,因此在函数外部打印的my_list已经添加了元素4。

需要注意的是,Python中的可变对象(如列表、字典)是通过引用传递,而不可变对象(如数字、字符串、元组)是通过值传递。这是因为可变对象可以直接修改其内部的值,而不可变对象在被修改时会创建一个新的对象。因此,对于不可变对象的修改实际上是创建了一个新对象,形参和实参指向的是不同的对象,不会相互影响。例如:

def change_string(my_string):
    my_string += " world"
    print("my_string inside the function:", my_string)

my_string = "hello"
change_string(my_string)
print("my_string outside the function:", my_string)

输出结果为:

my_string inside the function: hello world
my_string outside the function: hello

在上述代码中,函数change_string接收一个形参my_string,将其与字符串" world"拼接,并打印拼接后的字符串。在调用函数时,传递了实参my_string的副本,函数中对形参的修改不会影响到实参my_string的值,因此在函数外部打印的my_string还是原来的值"hello"。