"a和a或b"的目的是什么?

ely*_*hiv 9 python ternary-operator

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

oname = args and args or '_'
Run Code Online (Sandbox Code Playgroud)

那是什么意思?为什么不使用args or '_'

Jon*_*hop 9

我猜这是从Python中的古代(2.4或更早)的变体,其中三元运营商还没有提供给语言保持了过来.根据Python编程常见问题解答:

是否有相当于C的"?:"三元运算符?

就在这里.语法如下:

[on_true] if [expression] else [on_false]

x, y = 50, 25
small = x if x < y else y
Run Code Online (Sandbox Code Playgroud)

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

[expression] and [on_true] or [on_false]
Run Code Online (Sandbox Code Playgroud)

然而,这个成语是不安全的,因为它可以给错误的结果时on_true有一个假布尔值.因此,最好使用... if ... else ...表单.

有问题的行现在可以写成:

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

# Option 2
oname = args or '_'
Run Code Online (Sandbox Code Playgroud)

两者都产生相同的结果,因为在这种情况下[expression],选项1的[on_true]部分与该部分相同.我看到它,选项2可以被认为是其中箱子选项1的缩短的形式[expression][on_true]是相同的.您选择使用哪一个是个人偏好.

这可能会给我们提供一个线索,因为有问题的代码被触及了多长时间!