“ a and a or b”的目的是什么?

时间:2018-11-08 14:01:17

标签: python ternary-operator

我在ipython中遇到了以下代码:

oname = args and args or '_'

这有什么意义?为什么不只使用args or '_'

1 个答案:

答案 0 :(得分:9)

我猜想这是Python的古老(2.4或更早版本)变体的遗留之处,在该变体中,三元运算符尚不适用于该语言。根据{{​​3}}:

  

C是否等效于C的“?:”三元运算符?

     

是的,有。语法如下:

[on_true] if [expression] else [on_false]

x, y = 50, 25
small = x if x < y else y
     

在Python 2.5中引入此语法之前,一个常见的习惯用法是使用逻辑运算符:

[expression] and [on_true] or [on_false]
     

但是,这种习惯用法是不安全的,因为当on_true具有错误的布尔值时,它会产生错误的结果。因此,最好使用... if ... else ...表单。

所讨论的行现在可以写为:

# Option 1
oname = args if args else '_'

# Option 2
oname = args or '_'

两者都产生相同的结果,因为在这种情况下,选项1的[expression]部分与[on_true]部分相同。正如我所看到的,对于[expression][on_true]相同的情况,选项2可以视为选项1的简化形式。您选择使用哪一个是个人喜好。

这可能为我们提供了一个提示代码被触摸以来已有多长时间的线索!