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

Python函数的参数传递及默认参数:讲解Python函数中的参数传递方式和默认参数的使用方法。

发布时间:2023-07-02 09:44:02

在Python中,函数的参数传递方式有两种:值传递和引用传递。对于不可变类型(如整数、浮点数、字符串等),使用值传递,而对于可变类型(如列表、字典等),使用引用传递。

在值传递中,函数接收到的是参数的拷贝,对参数的修改不会影响原始值。例如:

def change_num(num):
    num = 10

number = 5
change_num(number)
print(number)  # 输出为5

在上述代码中,change_num()函数接收到number的拷贝,将拷贝赋值为10。然而,这并不会影响原始的number变量,所以输出依然为5。

而在引用传递中,函数接收到的是参数的引用,对参数的修改会影响原始值。例如:

def change_list(my_list):
    my_list.append(4)

old_list = [1, 2, 3]
change_list(old_list)
print(old_list)  # 输出为[1, 2, 3, 4]

在上述代码中,change_list()函数接收到old_list的引用,并在原始列表上进行修改,所以输出为[1, 2, 3, 4]。

此外,在Python中还可以使用默认参数来定义函数。默认参数是在函数定义时给参数赋初始值,当在调用函数时没有传递参数时,将使用默认参数的值。例如:

def greet(name='Alice'):
    print('Hello, ' + name + '!')

greet()  # 输出为Hello, Alice!
greet('Bob')  # 输出为Hello, Bob!

在上述代码中,greet()函数定义了一个名为name的默认参数,并将其值设为'Alice'。当调用greet()函数时,未传入参数,所以会使用默认参数的值,并输出'Hello, Alice!'。当调用greet('Bob')函数时,传入了参数'Bob',所以会使用传入的参数,并输出'Hello, Bob!'。

需要注意的是,默认参数的值在函数声明时就会被计算出来,并且只计算一次。所以,如果默认参数的值是一个可变类型(如列表或字典),并且在函数中对其进行了修改,那么这个修改会持续影响到后续函数的调用。例如:

def add_item(item, my_list=[]):
    my_list.append(item)
    print(my_list)

add_item(1)  # 输出为[1]
add_item(2)  # 输出为[1, 2]
add_item(3)  # 输出为[1, 2, 3]

在上述代码中,add_item()函数定义了一个名为my_list的默认参数,并将其值设为一个空列表。每次调用add_item()函数时,都会将传入的item添加到my_list中,并输出my_list。然而,由于默认参数是在函数声明时计算出来的,所以在后续函数调用中,my_list是同一个列表对象,并且会持续地被修改。所以,输出结果会依次为[1]、[1, 2]、[1, 2, 3]。

为了避免这个问题,可以将默认参数的值设为None,并在函数内部创建一个新的列表。例如:

def add_item(item, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(item)
    print(my_list)

add_item(1)  # 输出为[1]
add_item(2)  # 输出为[2]
add_item(3)  # 输出为[3]

在上述代码中,如果没有传入my_list参数,那么会在函数内部创建一个新的空列表。这样,每次函数调用时都会使用一个新的列表,并输出正确的结果。