协慌网

登录 贡献 社区

Python 有三元条件运算符吗?

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

答案

是的,它是在 2.5 版本中添加的
语法是:

a if condition else b

评估第一个condition ,然后根据condition布尔值返回ab
如果condition计算结果为True a则返回,否则返回b

例如:

>>> '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

在这种情况下,您必须使用普通的if语句而不是条件语句。


请记住,由于以下几个原因,一些 Pythonist 对此不满意:

  • 参数的顺序与许多其他语言(例如 C,Ruby,Java 等)不同,当不熟悉 Python 的 “惊人” 行为的人使用它时(可能会颠倒顺序),这可能会导致错误。
  • 有些人觉得它 “笨拙”,因为它与正常的思想流程相反(首先考虑条件然后考虑影响)。
  • 文体的原因。

如果您在记住订单时遇到问题,请记住,如果您大声朗读它,您(几乎)会说出您的意思。例如, x = 4 if b > 8 else 9x = 4 if b > 8 else 9大声朗读x = 4 if b > 8 else 9因为x will be 4 if b is greater than 8 otherwise 9

官方文件:

您可以索引到元组:

(falseValue, trueValue)[test]

test需要返回TrueFalse
总是将它实现为以下可能更安全:

(falseValue, trueValue)[test == True]

或者您可以使用内置的bool()来确保布尔值:

(falseValue, trueValue)[bool(<expression>)]

对于 2.5 之前的版本,有诀窍:

[expression] and [on_true] or [on_false]

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

1. 是否有相当于 C 的 “?:” 三元运算符?