【问题标题】:Lambdas in ternary operator unexpected behavior三元运算符中的 Lambda 意外行为
【发布时间】:2020-02-08 00:27:48
【问题描述】:
>>> (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
为什么需要调用后者两次?
谢谢。
【问题讨论】:
标签:
python
lambda
ternary-operator
【解决方案1】:
像lambda: 1 if condition else lambda: 2 这样写它会得到这样的解释:
lambda: (1 if condition else lambda: 2)
您需要这样编写它才能使其按预期工作:
(lambda: 1) if condition else lambda: 2
【解决方案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 语句返回函数。