此问题已在此处有答案:
Callable as the default argument to dict.get without it being called if the key exists(6个回答)
昨天关门了。
根据文档,dict的get方法可以有两个参数:键和一个值,如果键不在dict中,则返回该值。但是,当第二个参数是一个函数时,它将运行,而不管键是否在dict中:
def foo():
print('foo')
params={'a':1}
print(params.get('a', foo()))
# foo
# 1
如上所示,密钥a
在dict中,但foo()
仍然运行。这里发生了什么?
2条答案
按热度按时间insrf1ej1#
这是一个常见的误解,无论函数是否使用参数,都必须对参数进行评估,例如:
因此,即使函数
f
没有使用参数,print(1), print(2), print(3)
语句也会被执行。您可以使用try
except
来仅在需要时计算foo()
:enyaitl32#
你的第二个参数不是一个函数,它是一个函数调用。所以
.get()
方法调用它来获得它的第二个参数。要将函数作为第二个参数,必须删除它后面的括号: