索引到列表中
指某东西的用途
[expression_when_false, expression_when_true][condition] # or
(expression_when_false, expression_when_true)[condition]
利用 Python 中 True 等于(但不是!)1 和 False 等于(但不是!)0 的事实。上面的表达式构造了一个包含两个元素的列表,并使用条件的结果来索引列出并仅返回一个表达式。这种方法的缺点是两个表达式都被计算。
和-或快捷方式
自从 Python 创建以来,就有了这种操作的一种形式:
condition and expression_when_true or expression_when_false
这采用了一条捷径,只计算一个表达式,但有一个容易出错的缺点:expression_when_true 不能计算为非真值,否则结果是expression_when_false。and
并且or
在 Python 中是“短路”的,并且适用以下规则:
a and b #→ a if a is false, else b
a or b #→ a if a is true, else b
如果条件为假,则永远不会评估expression_when_true并且结果为expression_when_false。OTOH,如果条件为真,则结果为(expression_when_true或expression_when_false)的结果;请参阅上表。
三元条件运算符
当然,从 Python 2.5 开始,就有了一个三元条件运算符:
expression_when_true if condition else expression_when_false
操作数的奇怪顺序(如果您习惯于类似 C 的三元条件运算符)归因于很多事情;一般的意图是条件在大多数情况下应该为真,以便最常见的输出首先出现并且最明显。