三元运算符中的 Lambda 意外行为

Lambdas in ternary operator unexpected behavior

>>> (lambda: 1 if True else lambda: 2)()
1
>>> (lambda: 1 if False else lambda: 2)()
<function <lambda>.<locals>.<lambda> at 0x7f5772e8eef0>
>>> (lambda: 1 if False else lambda: 2)()()
2

为什么要调用后面那个两次?

谢谢。

lambda: 1 if condition else lambda: 2这样写会被解释成这样:

lambda: (1 if condition else lambda: 2)

您需要这样写才能使其按预期工作:

(lambda: 1) if condition else lambda: 2
lambda: 1 if False else lambda: 2

让我把它写成带有 if 语句的普通函数:

def func():
    if False:
        return 1
    else:
        return (lambda: 2)

现在如果我这样做:

x = func()

x 将是 lambda: 2 - 这是另一个函数。

那我怎么去2

x()

这给出:

2

现在如果我内联变量 x:

res = func()()

现在 res 将是 2

我希望你说的很清楚。这就是为什么需要两个 () 的原因。

你可能想要这样的东西:

(lambda: 1) if False else (lambda: 2)

这只是一个普通的 if 语句返回函数。