三元运算符中的 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 语句返回函数。
>>> (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 语句返回函数。