如何在Python中为函数设置默认参数值?

Python对默认参数值的处理是可以困扰大多数新Python程序员的几件事之一。

导致问题的原因是使用“可变”对象作为默认值。也就是说,可以就地修改的值,例如列表或字典。

如果未提供第二个参数,则每次调用该函数时都会创建一个新列表,因此EXPECTED OUTPUT为:

[12]
[43]

定义函数后,将创建一个新列表,并且在每个后续调用中都使用相同的列表。

定义函数时,Python的默认参数只计算一次,而不是每次调用函数时才计算。这意味着,如果您使用可变的默认参数并对其进行了突变,那么您将来也将对该对象也进行了突变,以供将来对函数的所有调用。

我们应该怎么做

每次调用该函数时,都要使用默认的arg来表示未提供任何参数,从而创建一个新对象(通常不选择它是一个不错的选择)。

示例

def func(data=[]):
    data.append(1)
    return data
func()
func()
def append2(element, foo=None):
    if foo is None:
        foo = []
    foo.append(element)
    return foo
print(append2(12))
print(append2(43))

输出结果

[12]
[43]