一尘不染

Python有三元条件运算符吗?

python

如果Python没有三元条件运算符,是否可以使用其他语言构造来模拟一个?


阅读 644

收藏
2020-02-04

共1个答案

一尘不染

它是在2.5版中添加的。表达式语法为:

a if condition else b

第一condition被评估,则恰好中的任一个a或b进行评估并返回基于所述布尔值condition。如果conditionTruea则被评估并返回但b被忽略,否则b被评估为返回但a被忽略。

这允许发生短路,因为condition仅当a评估为true时才进行评估,而b根本不评估,而当conditionfalse 评估时,仅当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 语句而不是条件表达式。

请记住,一些Pythonista对此不以为然,原因如下:

  • 参数的顺序与condition ? a : b其他许多语言(例如C,C ++,Go,Perl,Ruby,Java,Javascript等)中的经典三元运算符的顺序不同,当人们不熟悉Python的“令人惊讶的”行为使用它(它们可能会颠倒参数顺序)。
  • 有些人认为它“笨拙”,因为它与正常的思维流程相反(先思考条件,然后思考效果)。
  • 风格上的原因。(尽管'inline if'可能确实有用,并且可以使脚本更简洁,但确实会使代码复杂化)
    如果你在记住顺序时遇到麻烦,请记住当大声朗读时,你(几乎)说出了你的意思。例如,x = 4 if b > 8 else 9将朗读为x will be 4 if b is greater than 8 otherwise 9
2020-02-04