Yas*_*ris 4 python ternary-operator
我最近开始使用三元运算符,但我遇到了一个案例,我需要在同一行中使用多个三元运算符,但它们似乎没有像我预期的那样工作.
有人可以解释为什么这些线给出不同的结果.
x = 1 if True else 2 + 3 if False else 4 # x = 1, I expected 5
x = (1 if True else 2) + (3 if False else 4) # x = 5
Run Code Online (Sandbox Code Playgroud)
如果我添加括号,我会得到预期的结果,但我不明白括号的变化.
如果我旋转添加,没有括号,我得到正确的值.
3 if False else 4 + 1 if True else 2 # x = 5
Run Code Online (Sandbox Code Playgroud)
但是,如果第二个三元运算符为False,则会得到错误的结果:
3 if False else 4 + 1 if False else 2 # x = 5 # x = 2 ???
Run Code Online (Sandbox Code Playgroud)
是因为你不应该在同一行中有多个三元运算符,还是他们的另一个原因?
原因是运算符优先级.条件表达式具有最低但只有一个优先级,只有lambda表达式较低.因此,表达
1 if True else 2 + 3 if False else 4
Run Code Online (Sandbox Code Playgroud)
被评估为
1 if True else ((2 + 3) if False else 4)
Run Code Online (Sandbox Code Playgroud)
返回1.
可以把它想象为在三个输入中的每个输入周围应用括号:
x = (1) if (True) else ((2 + 3) if (False) else (4))
Run Code Online (Sandbox Code Playgroud)
在这里你可以清楚地看到x它将是相等的1,你2 + 3...将不会被运行.
当你"旋转"它时:
(3) if (False) else ((4 + 1) if (True) else (2))
Run Code Online (Sandbox Code Playgroud)
所以现在3不运行因为条件是False这样你得到了这个4 +...术语
在你的最后一个案例中
(3) if (False) else ((4 + 1) if (False) else (2))
Run Code Online (Sandbox Code Playgroud)
它返回,2因为这(4+1)是你的第二个条件的真实条件(这是False)
如果您仍然感到困惑,请将其写为常规if声明:
x = (1) if (True) else ((2 + 3) if (False) else (4))
Run Code Online (Sandbox Code Playgroud)
变
if True:
x = 1
else:
if False:
x = 2 + 3
else:
x = 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |