为什么我不能使用三元运算符将 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。
当我使用条件为 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。