python dict get方法运行第二个参数,即使key在dict [duplicate]中

rsl1atfo  于 2023-04-10  发布在  Python
关注(0)|答案(2)|浏览(96)

此问题已在此处有答案

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()仍然运行。这里发生了什么?

insrf1ej

insrf1ej1#

这是一个常见的误解,无论函数是否使用参数,都必须对参数进行评估,例如:

>>> def f(x, y, z): pass
... 
>>> f(print(1), print(2), print(3))
1
2
3

因此,即使函数f没有使用参数,print(1), print(2), print(3)语句也会被执行。您可以使用tryexcept来仅在需要时计算foo()

try:
    x = params['a']
except KeyError:
    x = foo()
enyaitl3

enyaitl32#

params.get('a', foo())

你的第二个参数不是一个函数,它是一个函数调用。所以.get()方法调用它来获得它的第二个参数。
要将函数作为第二个参数,必须删除它后面的括号:

params.get('a', foo)

相关问题