以下警告位于 Python 文档的“函数参数中的默认值”部分。
重要警告:默认值仅计算一次。当默认值是可变对象(例如列表、字典或大多数类的实例)时,这会产生影响。例如,以下函数会累积在后续调用中传递给它的参数:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
这将打印
[1]
[1, 2]
[1,2,3]
如果您不希望在后续调用之间共享默认值,您可以这样编写函数:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
我不太明白代码的 L=None 部分是如何解决这个问题的。你能帮我理解一下吗?谢谢
最佳答案
None
是不可变的,这意味着它不能更改。因此,如果将 None
设置为参数的默认值,则每次函数调用时它总是相同的,并且将一个新的空列表设置为 L
(因为它每次都会评估,而不仅仅是第一次调用该函数)。
关于python - 函数中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424737/