如果 Python 没有三元条件运算符,是否可以用其他语言结构来模拟三元条件运算符?
是的,它在2.5版本中被添加。表达式的语法是。
a if condition else b
首先评估 "条件",然后根据 "条件 "的布尔值,精确评估并返回 "a "或 "b "中的一个。如果condition'评估为
True',那么a'被评估并返回,但
b'被忽略,否则当b'被评估并返回,但
a'被忽略。
这允许短路,因为当条件'为真时,只有
a'被评估,b'根本没有被评估,但是当
条件'为假时,只有b'被评估,
a'根本没有被评估。
比如说。
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
请注意,条件式是一个表达式,而不是一个语句。这意味着你不能在条件表达式中使用赋值语句或pass
或其他语句。
>>> pass if False else x = 3
File "<stdin>", line 1
pass if False else x = 3
^
SyntaxError: invalid syntax
但是,你可以使用条件表达式来赋值一个变量,比如说。
x = a if True else b
把条件表达式看成是在两个值之间的切换。当你处于'一个值或另一个值的情况下,它是非常有用的,但它并不能做很多其他事情。
如果你需要使用语句,你必须使用正常的if
语句,而不是条件表达式。
请记住,由于几个原因,它被一些Pythonistas所反对。
condition ? a : b
三元运算符不同,当不熟悉Python的"surprising"行为的人使用它时,可能会导致bug(他们可能颠倒参数顺序)。如果你在记住顺序方面有困难,那么请记住,当大声朗读时,你(几乎)说的就是你的意思。例如,x = 4 if b > 8 else 9
被朗读为x will be 4 if b is greater than 8 otherwise 9
。
官方文件。
对于2.5之前的版本,有一个技巧。
[expression] and [on_true] or [on_false]
当on_true
的布尔值为假时,它可能会给出错误的结果。
有一个错误的布尔值。
虽然它确实有从左到右评估表达式的好处,在我看来这更清晰。
来自[文件]。
条件表达式 (有时被称为 "三元运算符") 在所有 Python 操作中具有最低的优先级。
表达式
x if C else y
首先评估条件,C (not x);如果C为真,x被评估,其值被返回;否则,y被评估,其值被返回。关于条件表达式的更多细节,见PEP 308。
从2.5版开始新增。