问:Python语法中是否有三元条件运算符?
答:有的,它是在2.5版中添加的。表达式语法为:
a if condition else b
首先计算条件,然后根据条件的布尔值计算并返回a或b中的一个。若条件的计算结果为 True,则计算并返回a,但忽略b;否则,计算并返回b,但忽略a。
这允许走捷径,因为当条件为真时,只计算a,根本不计算b,而当条件为假时,只计算b,根本不计算a。
例如:
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
注意,condition 是表达式,而不是语句。这意味着不能在条件表达式中使用 pass 或带有 =(或“增强”赋值,如 +=)的赋值等语句:
>>> pass if False else pass
File "<stdin>", line 1
pass if False else pass
^
SyntaxError: invalid syntax
>>> # Python 将其解析为 `x = (1 if False else y) = 2`
>>> # `(1 if False else x)` 部分实际上是有效的,
>>> # 但是它不能在“=”的左侧。
>>> x = 1 if False else y = 2
File "<stdin>", line 1
SyntaxError: cannot assign to conditional expression
>>> # 如果我们用括号代替...
>>> (x = 1) if False else (y = 2)
File "<stdin>", line 1
(x = 1) if False else (y = 2)
^
SyntaxError: invalid syntax
另一种方式,你可以索引到一个元组:
(falseValue, trueValue)[test]
其中,表达式 test 需要返回 True 或者 False。
这样实现可能会更安全:
(falseValue, trueValue)[test == True]
或者你可以使用内置的 bool() 来确保一个布尔值:
(falseValue, trueValue)[bool(<expression>)]
参考:stackoverflow question 394809
PS:
本文首发于公众号: 程序熵, 更多相关文章请添加关注 code-shang