我在Python函数的可选参数中将字典作为默认值,使用Sublime包中的pylint提示这是危险的。有人能解释一下为什么吗?还有,使用None
作为替代方案是否更好?
None
是否是更好的选择?我在Python函数的可选参数中将字典作为默认值,使用Sublime包中的pylint提示这是危险的。有人能解释一下为什么吗?还有,使用None
作为替代方案是否更好?
None
是否是更好的选择?让我们来看一个例子:
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}
hash=dict()
与hash={}
具有相同的行为。 - aydow只有在您的函数会修改参数时才会出现危险。如果您修改了默认参数,则该参数会一直存在于下一次调用之前,因此您的“空”字典将在除第一次调用之外的其他调用中开始包含值。
是的,在这种情况下使用 None
既安全又常规。
None
通常是最好的选择,但也许并非100%的情况。请根据您的判断力做出决定,但如果您无法决定,None
是一个安全的选择。 - John Zwinckarg: Optional[Mapping[str, str]] = None
。 - Inarus LynxNone
,即使函数被仔细编写以避免此类错误,纯粹是为了使对函数的看似无害的更改不能破坏它。 - kaya3