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

Python函数的默认参数及其使用方式

发布时间:2023-12-04 00:41:49

默认参数是在定义函数时,为参数提供一个默认值。当调用函数时,如果没有传递该参数的值,则使用默认值。

默认参数的使用方式有三种:

1. 位置参数和默认参数组合使用:在定义函数时,将默认参数放在位置参数之后。当调用函数时,如果不传递默认参数的值,则使用默认值;如果传递了默认参数的值,则使用传递的值。

def greet(name, age=18):
    print("Hello", name)
    print("You are", age, "years old")
    
greet("John")
greet("Alice", 20)

输出:

Hello John
You are 18 years old
Hello Alice
You are 20 years old

2. 关键字参数和默认参数组合使用:在调用函数时,使用关键字参数来指定默认参数的值。

def greet(name, age=18):
    print("Hello", name)
    print("You are", age, "years old")
    
greet(name="John")
greet(name="Alice", age=20)

输出:

Hello John
You are 18 years old
Hello Alice
You are 20 years old

3. 默认参数的值是可变对象:当默认参数的值是可变对象(如列表或字典)时,如果在函数内部对该对象进行修改,会影响到下一次函数调用时,默认参数的值。

def add_item(item, list=[]):
    list.append(item)
    return list

print(add_item(1))
print(add_item(2))
print(add_item(3))

输出:

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

在上述代码中,每次调用add_item()函数时,如果没有传递默认参数的值,则使用默认列表[]。由于默认参数的值在函数定义时就已经创建,并且这个列表对象在每次函数调用时都是同一个,因此每次调用add_item()函数时,对默认列表进行的操作都会影响到下一次函数调用的默认列表。

为了避免这种问题,可以将默认参数的值设为None,并在函数内部判断参数是否为None,如果是,则将参数重新赋值为一个新的列表。

def add_item(item, list=None):
    if list is None:
        list = []
    list.append(item)
    return list

print(add_item(1))
print(add_item(2))
print(add_item(3))

输出:

[1]
[2]
[3]

通过将默认参数的值设为None,并在函数内部判断参数是否为None,可以避免默认参数的值在函数调用之间共享的问题。