为什么我不能使用三元运算符将 lambda 分配给变量

Why can't I assign lambda to the variable using ternary operator

当我使用条件为 true 的三元运算符将匿名函数分配给变量时,我可以像普通函数一样调用该变量。

>>> a = lambda x, y: x + y if True else lambda x, y: x * y
>>> a(1, 2)
3

但是当条件为假并且要分配的函数在单词else之后时,我会得到这样的结果。我不知道这种奇怪行为背后的机制是什么。有语法上的细微差别吗?或者在这种情况下是否有可能使用三元运算符?

>>> a = lambda x, y: x + y if False else lambda x, y: x * y
>>> a(1, 2)
<function <lambda>.<locals>.<lambda> at 0x10916aee0>

您需要使用括号来表明您的意思。

你是说

(lambda x, y: x + y) if True
else (lambda x, y: x * y)

但你有

lambda x, y:
    (x + y if True
     else lambda x, y: x * y)

... if ... else ... 运算符的优先级高于 lambda。参见 https://docs.python.org/3/reference/expressions.html#operator-precedence