【发布时间】:2012-03-22 14:51:26
【问题描述】:
可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
当我注意到如果你有一个空的字典作为函数的输入时,我正在处理字典,在下次调用函数时在函数中输入它之后,字典不再为空。我很难解释我的意思,所以我希望下面的代码能解释我的意思:
>>> def test(input, dct={}):
... dct[input] = 'test'
... print dct
...
>>> test('a')
{'a': 'test'}
>>> test('b')
{'a': 'test', 'b': 'test'}
我的问题归结为:为什么在这个示例脚本中,当执行 test('b') 时,它会打印出来
{'a':'test', 'b':'test'}
而不是
{'b':test'}
【问题讨论】:
-
请参阅Python Tutorial 中的“重要警告”。我们每周至少收到一次这个问题...
-
对不起,我没有找到它,我没有搜索“Python 中的 Least Astonishment”或“可变默认参数”
-
在 SO 上有数百个问题。经常出现这种情况说明好像确实很难找,但是不知道怎么改善。
-
问题是这种现象第一次遇到不容易搜索。我认为将这个问题标记下来并关闭它有点苛刻(在撰写本文时有 4 票关闭)。
-
@MattH:我认为关闭它很好,因为它是重复的。而且我并不是想“让它下来”。
标签: python function dictionary