8.4 条件表达式(即“三元操作符”)

如果你来自C/C++或者是Java世界,那么你很难忽略的一个事实就是Python在很长的一段时间里没有条件表达式(C? X:Y),或称三元操作符。(C是条件表达式;X是C为True时的结果,Y是C为 False时的结果)Guido Van Rossum一直拒绝加入这样的功能,因为他认为应该保持代码简单,让程序员不轻易出错。不过在十年多后,他放弃了,主要是因为人们试着用and和or来模拟它,但大多都是错误的。根据《FAQ》,正确的方法(并不唯一)是(C and[X]or[Y])[0]。唯一的问题是社区不同意这样的语法。(你可以看一看PEP 308,其中有不同的方案)。对于Python的这一问题,人们表达了极大的诉求。

Guido Van Rossum最终选择了一个最被看好(也是他最喜欢)的方案,然后把它运用于标准库中的一些模块。根据PEP,“这个评审通过考察大量现实世界的案例,包含不同的应用,以及由不同程序员完成的代码。”最后Python2.5集成的语法确定为:X if C else Y。

有了三元操作符后你就只需要一行完成条件判断和赋值操作,而不需要像下面例子中的min()那样,使用if-else语句实现对数字x和y的操作:

8.4 条件表达式(即“三元操作符”) - 图1

在2.5以前的版本中,Python程序员最多这样做(其实是一个hack,译者注):

8.4 条件表达式(即“三元操作符”) - 图2

在2.5和更新的版本中,你可以使用更简明的条件表达式:

8.4 条件表达式(即“三元操作符”) - 图3