当再次调用该函数时,为什么这个字典没有被清空?

时间:2012-03-22 14:51:26

标签: python function dictionary

  

可能重复:
  “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'}

2 个答案:

答案 0 :(得分:1)

python中的函数参数只初始化一次。如果您希望它是每次调用,只需将其初始化为函数内的空字典。

答案 1 :(得分:1)

因为dct={}使dct的默认值始终指向同一个对象,而不是每次都创建一个空字典。这是Python程序员可能陷入的常见陷阱。

This article详细解释了这个问题。