首页 > 解决方案 > 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。

有人可以向我解释为什么在第一种情况下返回的定义不起作用?

先感谢您!

标签: pythondictionaryif-statementlambda

解决方案


你的 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'))()

推荐阅读