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