Why is the empty dictionary a dangerous default value in Python?
本问题已经有最佳答案,请猛点这里访问。
我将空大括号作为Python函数可选参数的默认值,而pylint(使用sublime包)告诉我这很危险。有人能解释为什么会这样吗?是否是一个更好的选择而不是不使用?
让我们来看一个例子:
1 2 3 4 5 6 | def f(value, key, hash={}): hash[value] = key return hash print f('a', 1) print f('b', 2) |
您可能期望输出:
1 2 | {'a': 1} {'b': 2} |
但实际上输出:
1 2 | {'a': 1} {'a': 1, 'b': 2} |
只有当函数修改参数时才是危险的。如果修改一个默认参数,它将一直持续到下一个调用,因此"空"dict将开始包含除第一个调用以外的调用的值。
是的,在这种情况下使用