在 Python 中,默认参数的值是在函数定义时计算的,而不是在函数调用时计算的。因此,如果你更改了默认参数的值,那么这个改变将在随后的函数调用中保持。
在下面的例子中,如果我们使用可变的list类型作为函数的默认值,就会出现这样的问题:
def demo(obj = []):
print(obj)
obj.append(1)
demo() # []
demo() # [1]
demo() # [1, 1]
demo() # [1, 1, 1]
为了避免这种情况,建议永远不要使用可变的默认参数,如列表或字典。应该使用None作为默认值,并在函数内部进行检查。
def demo(obj=None):
if obj is None:
obj = []
print(obj)
obj.append(1)