Does Python have a ternary conditional operator?

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


Yes, it was added in version 2.5.
The syntax is:

a if condition else b

First condition is evaluated, then either a or b is returned based on the Boolean value of condition
If condition evaluates to True a is returned, else b is returned.

For example:

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

Note that conditionals are an expression, not a statement. This means you can't use assignments or pass or other statements in a conditional:

>>> pass if False else x = 3
  File "<stdin>", line 1
    pass if False else x = 3
          ^
SyntaxError: invalid syntax

In such a case, you have to use a normal if statement instead of a conditional.


Keep in mind that it's frowned upon by some Pythonistas for several reasons:

  • The order of the arguments is different from many other languages (such as C, Ruby, Java, etc.), which may lead to bugs when people unfamiliar with Python's "surprising" behaviour use it (they may reverse the order).
  • Some find it "unwieldy", since it goes contrary to the normal flow of thought (thinking of the condition first and then the effects).
  • Stylistic reasons.
  • If you're having trouble remembering the order, then remember that if you read it out loud, you (almost) say what you mean. For example, x = 4 if b > 8 else 9 is read aloud as x will be 4 if b is greater than 8 otherwise 9 .

    Official documentation:

  • Conditional expressions
  • Is there an equivalent of C's ”?:” ternary operator?

  • You can index into a tuple:

    (falseValue, trueValue)[test]
    

    test needs to return True or False.
    It might be safer to always implement it as:

    (falseValue, trueValue)[test == True]
    

    or you can use the built-in bool() to assure a Boolean value:

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

    For versions prior to 2.5, there's the trick:

    [expression] and [on_true] or [on_false]
    

    It can give wrong results when on_true has a false boolean value.1
    Although it does have the benefit of evaluating expressions left to right, which is clearer in my opinion.

    1. Is there an equivalent of C's ”?:” ternary operator?

    链接地址: http://www.djcxy.com/p/106.html

    上一篇: 为什么(>>)没有定义为(*>)?

    下一篇: Python是否有三元条件运算符?