在Python中,函数默认参数是指在函数定义中为参数指定默认值的参数。当调用函数时,如果没有为默认参数提供值,那么将使用默认值。
函数默认参数的语法如下:
def function_name(parameter1=default_value1, parameter2=default_value2, ...):
# 函数体
下面是一个使用默认参数的函数示例:
def greet(name, message="Hello"):
print(f"{message}, {name}!")
greet("Alice") # 不指定message参数,默认使用"Hello"
greet("Bob", "Hi") # 指定message参数为"Hi"
输出结果:
Hello, Alice!
Hi, Bob!
在上述示例中,我们定义了一个名为greet
的函数,它有两个参数:name
和message
。message
参数被赋予了默认值"Hello"
。当我们调用greet
函数时,如果不传递message
参数,则会使用默认值;如果传递了message
参数,则会使用传递的值。
需要注意的是,默认参数通常在函数定义时就已经指定,而不是在函数调用时。
一些关于默认参数的注意事项:
- 默认参数应该放在非默认参数之后。也就是说,如果一个函数既有默认参数又有没有默认值的参数,那么默认参数应该位于参数列表的末尾。
- 默认参数的值在函数定义时被评估并分配,之后每次调用函数时都会使用相同的默认值。因此,如果默认值是可变对象(如列表或字典),修改默认值可能会影响后续函数调用。
以下是一个示例,说明后续函数调用中默认参数的行为:
def add_item(item, items=[]):
items.append(item)
return items
print(add_item("apple")) # 第一次调用默认参数,默认为空列表,添加"apple"
print(add_item("banana")) # 第二次调用,默认参数为之前的列表,添加"banana"
print(add_item("cherry")) # 第三次调用,默认参数为之前的列表,添加"cherry"
# 输出结果:
# ['apple']
# ['apple', 'banana']
# ['apple', 'banana', 'cherry']
在上述示例中,我们定义了一个名为add_item
的函数,它有两个参数:item
和items
(默认为一个空列表)。在每次函数调用时,如果没有明确提供items
参数,将使用之前的列表。这导致在后续函数调用中,item
元素会被添加到相同的列表中。
为了避免这种情况,可以将默认参数设置为None
,并在函数内部检查参数是否为None
,然后在需要时创建一个新列表。