首页 > 解决方案 > “a and a or b”的目的是什么?

问题描述

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

oname = args and args or '_'

那有什么意义呢?为什么不使用 just args or '_'

标签: pythonternary-operator

解决方案


我猜这是 Python 的古老(2.4 或更早版本)变体的保留,其中三元运算符尚未可用于该语言。根据Python 编程常见问题解答

是否有等效于 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 '_'

两者都产生相同的结果,因为在这种情况下[expression],选项 1 的部分与该[on_true]部分相同。[expression]在我看来,对于和[on_true]相同的情况,选项 2 可以被认为是选项 1 的缩写形式。您选择使用哪一个是个人喜好。

这可能会给我们一个线索,让我们知道自从有问题的代码被触及以来已经有多久了!


推荐阅读