跳转至

3. Python中有三目运算符吗

题目

如果Python没有三目运算符,是否有可能使用其他数据结构来模拟?链接

回答一

Python2.5开始加入三目运算符

语法如下

a if condition else b

首先计算condition, 然后根据condition的值返回ab

例如

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

注意:conditionals是表达式,而非语句,这意味着不能在conditionals中使用赋值、pass或其他语句。

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

在上例中,仅使用if语句即可。


这个语法在Python社区也引发了很多争论,原因如下

  1. 参数的顺序与C语言、Ruby、Java等不同,Python的初学者易写出bug
  2. 有人认为不方便写(unwieldy),因为这与正常的思维方式(先考虑条件,再考虑效果)相悖
  3. 风格上的原因

官方文档:

回答二

用元组的下标(index)来模拟: (falseValue, trueValue)[test],test需要返回true或者是false

这样实现更安全: (falseValue, trueValue)[test == True]

或者使用内置的bool确保是个布尔值:(falseValue, trueValue)[bool(<expression>)]

>>> a = 10
>>> ('kid', 'adult')[a >= 18]
'kid'