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

Python中的参数默认值

发布时间:2023-11-18 14:00:19

在Python中,函数的参数可以设定默认值。这使得在调用函数时,如果没有向该参数传递值,就会使用默认值。参数的默认值可以是任意类型的数据,例如整数、浮点数、字符串、列表等。

在函数定义中,可以使用赋值运算符(=)来为参数设定默认值。下面是一个示例:

def foo(x, y=10):
    print(x + y)
    
foo(5)  # 输出 15
foo(5, 20)  # 输出 25

在上述示例中,函数foo有两个参数xy。参数y的默认值被设置为10。当只传递一个参数x时,函数使用默认值10来计算结果。当传递两个参数xy时,函数使用传递的参数来计算结果。

需要注意的是,默认值在函数定义时计算,并且只计算一次。这意味着如果默认值是可修改的对象,而且在函数中修改了该对象,那么默认值会随着函数的调用而改变。下面是一个示例:

def append_item(item, lst=[]):
    lst.append(item)
    print(lst)
    
append_item(1)  # 输出 [1]
append_item(2)  # 输出 [1, 2]

在上述示例中,函数append_item有两个参数itemlst,其中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中的参数默认值可以使函数调用更加灵活,但需要注意默认值只在函数定义时计算一次,并且需要避免使用可修改的对象作为默认值,以避免不符合预期的结果。