为什么空字典在Python中是危险的默认值? [重复]

问题描述 投票:97回答:2

我将dict作为Python函数可选参数的默认值,而pylint(使用Sublime包)告诉我,这很危险。有人可以解释为什么会这样吗?并且是使用None的更好替代方法吗?

python optional-parameters pylint optional-arguments
2个回答
112
投票

仅当您的函数将修改参数时,这才是危险的。如果您修改默认参数,它将保留到下一次调用,因此您的“空”字典将开始包含除第一个调用以外的其他调用的值。

是,在这种情况下,使用None是安全和常规的。


139
投票

让我们看一个例子:

def f(value, key, hash={}):
    hash[value] = key
    return hash

print f('a', 1)
print f('b', 2)

您可能希望输出:

{'a': 1}
{'b': 2}

但实际上输出:

{'a': 1}
{'a': 1, 'b': 2}
© www.soinside.com 2019 - 2024. All rights reserved.