在以下定义的函数中,
def a_function(x, dictionary = dict()):
if not dictionary:
print('Empty Dictionary')
dictionary['A'] = 1
dictionary['B'] = 2
return dictionary.get(x)
它接受'A'
或'B'
并返回1
或2
。字典参数应该每次都初始化,但是当我运行它时,它是不可变的,因为一旦创建,它就不会再次启动。'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