可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
当我注意到如果你有一个空的dict作为函数的输入时,我正在编写一个字典,在下次调用该函数时在函数中输入它后,dict不再是空的。我无法解释我的意思,所以我希望以下代码解释我的意思:
>>> def test(input, dct={}):
... dct[input] = 'test'
... print dct
...
>>> test('a')
{'a': 'test'}
>>> test('b')
{'a': 'test', 'b': 'test'}
我的问题归结为:为什么在这个示例脚本中,在进行测试('b')时,是否打印
{'a':'test', 'b':'test'}
而不是
{'b':test'}
答案 0 :(得分:1)
python中的函数参数只初始化一次。如果您希望它是每次调用,只需将其初始化为函数内的空字典。
答案 1 :(得分:1)
因为dct={}
使dct
的默认值始终指向同一个对象,而不是每次都创建一个空字典。这是Python程序员可能陷入的常见陷阱。
This article详细解释了这个问题。