如何定义带有默认参数值的Python函数?
在Python中,可以使用默认参数值来定义一个函数。默认参数值是在定义函数时为参数指定的默认值。当调用函数时,如果没有提供参数的值,则使用默认值。
要定义一个带有默认参数值的函数,可以在参数名后使用等号来指定默认值。以下是定义带有默认参数值的Python函数的示例:
def greet(name="World"):
print("Hello, " + name + "!")
在上面的示例中,函数greet()带有一个参数name,其默认值是"World"。如果不提供参数的值,将使用默认值"World"。
下面是使用带有默认参数值的Python函数的示例:
greet() # 输出:Hello, World!
greet("Alice") # 输出:Hello, Alice!
在第一个示例中,调用greet()函数没有提供参数的值,因此使用默认值"World",输出Hello, World!。在第二个示例中,调用greet("Alice")函数提供了参数的值为"Alice",因此输出Hello, Alice!。
要注意的是,默认参数值只在函数定义时评估一次。这意味着,如果默认参数值是可变对象(例如列表、字典等),并且在函数中修改了该对象,在后续的函数调用中将继续使用修改后的值。
以下是一个示例:
def add_item(item, list=[]):
list.append(item)
print(list)
add_item("apple") # 输出:['apple']
add_item("banana") # 输出:['apple', 'banana']
在上面的示例中,函数add_item()有两个参数,其中一个参数list有一个默认值[]。在第一个调用add_item("apple")时,将"apple"添加到list中,并打印['apple']。在第二个调用add_item("banana")时,list仍然保留着之前的值['apple'],因此将"banana"添加到list中,并打印['apple', 'banana']。
为避免这种问题,可以将默认参数的值设置为不可变对象(例如None)并在函数内部创建一个新的可变对象。以下是修改后的示例:
def add_item(item, list=None):
if list is None:
list = []
list.append(item)
print(list)
add_item("apple") # 输出:['apple']
add_item("banana") # 输出:['banana']
在上面的示例中,将list的默认值设置为None,并在函数内部检查如果list为None,则创建一个新的空列表。这样,在每次调用add_item()函数时,都会创建一个新的空列表。
