默认参数是可变对象【PYTHON】
“默认参数是可变对象”这会导致函数的默认参数在多次调用时共享同一个对象,从而导致意外的结果。这是因为Python在定义函数时,会将默认参数存储在函数对象中(也就是在定义阶段已经产生了一个实例),而不是每次调用函数时都重新计算。如果默认参数是可变对象,那么每次调用函数时都会修改这个对象,从而导致意外的结果。例如,以下代码:
def f(l=[]):
l.append("x")
print(l)
f()
['x']
f()
['x','x']
f()
['x','x','x']
这可能并不是我们想要的,要避免这种情况,可以使用不可变对象做为默认参数,或者在函数内部创建一个新的可变对象。例如:
def f(l=None):
if l is None:
l = []
l.append("x")
print(l)
f()
['x']
f()
['x']
f()
['x']