python - Lambda 函数未在具有“if-else”值的字典中执行
问题描述
我正在尝试在 Python 字典中定义不同的 lambda 函数。我知道最好的办法可能是在字典项的“值”部分中只有一个 lambda 函数,并在定义的函数中管理子案例,但是我不明白为什么这段代码不能像我想要的那样工作:
def a():
print('a')
def b():
print('b')
def c():
print('c')
def d():
print('d')
condition = True
dict = {
'foo': lambda: a() if condition else lambda: b(),
'bar': lambda: c() if condition else lambda: d()
}.get('foo', lambda: print('not found'))()
如果我们设置条件 = False,代码将不会打印 b,它不会做任何事情(看起来)..为什么?相反,如果我们尝试使用没有 lambda 函数定义的字典,它似乎可以按我的预期工作:
dict2 = {
'foo': 4 if condition else 5,
'bar': 6 if condition else 7
}.get('foo', -1)
dict2 将是 5。
有人可以向我解释为什么在第一种情况下返回的定义不起作用?
先感谢您!
解决方案
你的 lambda 表达式:
lambda: a() if condition else lambda: b()
实际上是:
(lambda: a() if condition else (lambda: b()))
所以如果condition == False
,你返回 lambda,如果True
- 你使用a()
无论如何,这里的 lambdas 是不必要的。您可以将其替换为:
dict_ = {
'foo': a if condition else b,
'bar': c if condition else d
}.get('foo', lambda: print('not found'))()
推荐阅读
- javascript - 如何解析具有多个值的json数据?
- asp.net-mvc - 通过 BillQuery 从 qbxml 中的 QuickBooks 获取账单?
- optimization - 为什么“下载”文件内容的时间很长
- apache - ImportError:在 httpd 上使用 mod_wsgi 部署烧瓶应用程序时没有名为 pyodbc 的模块
- woocommerce - 如何将 Woocommerce 结帐页面字段设置为只读
- openstack - 具有讽刺意味的导体一开始就死了
- mysql - How to correctly use an IF statment to add a specific WHERE condition?
- android - 屏幕关闭时如何获取 Android.Telephony.PhoneState?
- javascript - how to use window.open onClick - reactjs
- oracle - SpringBoot 和 Oracle 的问题:创建列“created Date”时间戳时出错:Unexpected token