如何在函数中使用默认参数?
在Python中,可以通过在函数定义中为参数提供默认值来使用默认参数。默认参数是在定义函数时为参数指定的值,如果函数在调用时没有提供对应的参数值,就会使用默认值。
为了在函数中使用默认参数,可以按照以下步骤进行操作:
1. 在函数定义时,为希望设置默认值的参数提供一个初始值。例如,下面的代码定义了一个函数greet,其中name参数具有默认值"Guest":
def greet(name="Guest"):
print(f"Hello, {name}!")
2. 当函数被调用时,可以选择提供参数值。如果不提供参数值,函数将使用默认值。例如,下面的代码演示了如何调用带有默认参数的函数:
greet("Alice") # 输出:Hello, Alice!
greet() # 输出:Hello, Guest!
在 个调用中,提供了一个参数值"Alice",因此它将取代默认值,输出为Hello, Alice!。 在第二个调用中,没有提供参数值,因此将使用默认值"Guest",输出为Hello, Guest!。
需要注意的是,默认参数只能按照从左到右的顺序定义。也就是说,所有非默认参数必须在默认参数之前。例如,以下是一个错误的函数定义:
def foo(a="default", b):
print(a, b)
上述函数定义是错误的,如果一个参数具有默认值,那么它后面的所有参数都必须具有默认值。
此外,需要注意的是,默认参数的值在函数定义时确定,而不是每次调用函数时都重新确定。这意味着如果默认参数是可变对象(如列表或字典),并且在函数内部被修改了,这个修改是持久的。下面的示例演示了这一点:
def add_item(item, lst=[]):
lst.append(item)
return lst
print(add_item(1)) # 输出:[1]
print(add_item(2)) # 输出:[1, 2]
在上述示例中,add_item函数接受item参数和一个默认的lst参数,它是一个空列表。当add_item被 次调用时,它将item添加到空列表中。在第二次调用时,该列表仍然存在,并带有一个元素。这是因为默认参数lst在函数定义时被创建,并且在每次函数调用时都持续存在,而不是每次函数调用时都重新创建。
为了避免这种情况,可以将默认参数设为None,然后在函数内部检查参数是否是None,如果是,则创建一个新的可变对象。以下是如何修复上述示例的代码:
def add_item(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
print(add_item(1)) # 输出:[1]
print(add_item(2)) # 输出:[2]
在上述修复后的代码中,当lst参数为None时,会创建一个新的空列表作为默认值,而不是在函数定义时创建。这样,每次函数调用时都会使用一个新的空列表。
