Python中的参数默认值
发布时间:2023-11-18 14:00:19
在Python中,函数的参数可以设定默认值。这使得在调用函数时,如果没有向该参数传递值,就会使用默认值。参数的默认值可以是任意类型的数据,例如整数、浮点数、字符串、列表等。
在函数定义中,可以使用赋值运算符(=)来为参数设定默认值。下面是一个示例:
def foo(x, y=10):
print(x + y)
foo(5) # 输出 15
foo(5, 20) # 输出 25
在上述示例中,函数foo有两个参数x和y。参数y的默认值被设置为10。当只传递一个参数x时,函数使用默认值10来计算结果。当传递两个参数x和y时,函数使用传递的参数来计算结果。
需要注意的是,默认值在函数定义时计算,并且只计算一次。这意味着如果默认值是可修改的对象,而且在函数中修改了该对象,那么默认值会随着函数的调用而改变。下面是一个示例:
def append_item(item, lst=[]):
lst.append(item)
print(lst)
append_item(1) # 输出 [1]
append_item(2) # 输出 [1, 2]
在上述示例中,函数append_item有两个参数item和lst,其中lst的默认值被设置为一个空列表[]。当 次调用函数append_item(1)时,列表被添加了一个元素1,并输出了[1]。然而,当第二次调用函数append_item(2)时,期望的输出是[2],但实际上输出了[1, 2]。这是因为在函数定义时,默认值[]被计算,并且在每次函数调用时都使用同一个默认值。所以,每次调用函数都在同一个列表上进行修改。
为了避免这种问题,可以将可修改的默认值设为None,然后在函数内部检查是否为None,如果是则创建一个新的对象。下面是修复上述问题的示例:
def append_item(item, lst=None):
if lst is None:
lst = []
lst.append(item)
print(lst)
append_item(1) # 输出 [1]
append_item(2) # 输出 [2]
在修复后的示例中,如果没有传递lst参数,或者传递的是None,函数内部会创建一个新的空列表。这样,在每次调用函数时,都使用的是一个新的列表对象。
总结一下,Python中的参数默认值可以使函数调用更加灵活,但需要注意默认值只在函数定义时计算一次,并且需要避免使用可修改的对象作为默认值,以避免不符合预期的结果。
