答案 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的简化形式。您选择使用哪一个是个人喜好。
这可能为我们提供了一个提示代码被触摸以来已有多长时间的线索!