Python 是否有一个三元条件运算符?

如果 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 "", line 1
    pass if False else x = 3
          ^
SyntaxError: invalid syntax

但是,你可以使用条件表达式来赋值一个变量,比如说。

x = a if True else b

把条件表达式看成是在两个值之间的切换。当你处于'一个值或另一个值的情况下,它是非常有用的,但它并不能做很多其他事情。

如果你需要使用语句,你必须使用正常的if语句,而不是条件表达式。


请记住,由于几个原因,它被一些Pythonistas所反对。

  • 参数的顺序与许多其它语言(如C、C++、Go、Perl、Ruby、Java、Javascript等)的经典的condition ? a : b三元运算符不同,当不熟悉Python的"surprising"行为的人使用它时,可能会导致bug(他们可能颠倒参数顺序)。
  • 有些人认为这很不方便,因为它与正常的思维流程(先想条件,后想效果)相反。
  • 文体上的原因。(虽然内联的 "if "真的很有用,可以使你的脚本更简洁,但它确实使你的代码更复杂。)

如果你在记住顺序方面有困难,那么请记住,当大声朗读时,你(几乎)说的就是你的意思。例如,x = 4 if b > 8 else 9被朗读为x will be 4 if b is greater than 8 otherwise 9

官方文件。

评论(10)

对于2.5之前的版本,有一个技巧。

[expression] and [on_true] or [on_false]

on_true的布尔值为假时,它可能会给出错误的结果。 有一个错误的布尔值。 虽然它确实有从左到右评估表达式的好处,在我看来这更清晰。

1.是否有与C语言的"?: "三元运算符等价的东西?

评论(4)

来自[文件]。

条件表达式 (有时被称为 "三元运算符") 在所有 Python 操作中具有最低的优先级。

表达式x if C else y首先评估条件,C (not x);如果C为真,x被评估,其值被返回;否则,y被评估,其值被返回。

关于条件表达式的更多细节,见PEP 308

从2.5版开始新增。

评论(0)