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

Python函数中的默认参数是什么?如何使用它们?

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

默认参数是在定义函数时,给参数指定一个默认值。当调用函数时,如果没有给该参数传入具体的值,则使用默认值。

默认参数的定义形式为在参数名后添加= 默认值,例如:

def greet(name, age=18):
    print(f"Hello, {name}! You are {age} years old.")

上述代码中,age参数的默认值为18。

在调用函数时,可以选择性地给参数传入具体的值,如果不传入,则会使用默认值。例如:

greet("Alice")

输出:

Hello, Alice! You are 18 years old.

调用函数时,也可以传入与默认参数相同名称的值,这样会覆盖默认值。例如:

greet("Bob", 25)

输出:

Hello, Bob! You are 25 years old.

默认参数的使用有以下几个特点和注意事项:

1. 默认参数必须放在非默认参数的后面,否则会产生语法错误。例如,以下是错误的定义:

def greet(age=18, name):
    # code

2. 默认参数的值是在函数定义阶段确定的,而不是在函数调用阶段确定的。也就是说,如果默认参数是可变对象(如列表、字典等),则每次调用函数时,如果修改了该可变对象的值,则会影响下次调用时的默认值。例如:

def add_number(numbers=[]):
    numbers.append(0)
    print(numbers)

add_number()  # 输出 [0]
add_number()  # 输出 [0, 0]

上述代码中,每次调用add_number函数时,如果没有传入具体的值,则默认使用空列表作为默认值。但由于每次调用时都去修改了该列表,导致下次调用时的默认值并不是空列表。

为了避免这种情况,可以将默认参数设置为不可变对象(如None),然后在函数内部判断是否为空,若为空则创建可变对象。例如:

def add_number(numbers=None):
    if numbers is None:
        numbers = []
    numbers.append(0)
    print(numbers)

add_number()  # 输出 [0]
add_number()  # 输出 [0]

这样就能避免默认参数值的共享和影响。

3. 使用默认参数可以使函数的调用更加灵活。当某些参数在大部分调用中都是相同的,只有少数情况需要传入不同的值时,可以使用默认参数来简化代码。另外,在一些有多个参数的函数中,可以使用默认参数将某些参数标记为可选,从而在不传入具体值时有一个合理的默认值。

总结:默认参数是在定义函数时给参数指定的默认值,在调用函数时可以选择性地给参数传入具体值,不传入则使用默认值。在使用默认参数时,需要注意默认参数值是在函数定义阶段确定的,可变对象作为默认参数可能会有意想不到的影响,因此最好使用不可变对象作为默认参数,并在函数内部判断是否为空来创建可变对象。