可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
我已经通过艰难的方式了解到,当初始化为默认函数参数时,本机对象(如列表和字典)表现得很奇怪。
实施例
>>> def test(key,val,d={}):
d[key]=val
return d
>>> test(1,2)
{1: 2}
>>> test(2,3)
{1: 2, 2: 3}
通常,我希望test(2,3)
的结果为{2: 3}
。不幸的是,变量d
似乎只被初始化一次并在使用不同的参数调用函数时重用。
我已经学会了使用它,我甚至停止使用默认本机对象作为默认参数。但是,我想知道为什么会有这样的行为。我不认为Python开发人员只是把它弄得乱七八糟,应该有更好的解释。