为什么 Python 3 中函数中的初始化字典参数是不可变的?



在以下定义的函数中,

def a_function(x, dictionary = dict()):
if not dictionary:
print('Empty Dictionary')
dictionary['A'] = 1
dictionary['B'] = 2
return dictionary.get(x)

它接受'A''B'并返回12。字典参数应该每次都初始化,但是当我运行它时,它是不可变的,因为一旦创建,它就不会再次启动。'Empty Dictionary'仅运行一次。为什么?

>> a_function('A')
Empty Dictionary
1
>> a_function('B')
2

Python 文档指出:

默认参数值在以下情况下从左到右计算 执行函数定义。

这意味着表达式是 计算一次,当函数被定义时,并且相同的 "预先计算"值用于每个调用

例如:

>>> import datetime
>>> def f(foo=datetime.datetime.now()):
...     print(foo)
>>> f()
2020-01-21 05:21:35.084471
>>> f()
2020-01-21 05:21:35.084471

最新更新