ely*_*hiv 9 python ternary-operator
我在ipython中遇到了以下代码:
oname = args and args or '_'
Run Code Online (Sandbox Code Playgroud)
那是什么意思?为什么不使用args or '_'?
我猜这是从Python中的古代(2.4或更早)的变体,其中三元运营商还没有提供给语言保持了过来.根据Python编程常见问题解答:
是否有相当于C的"?:"三元运算符?
就在这里.语法如下:
Run Code Online (Sandbox Code Playgroud)[on_true] if [expression] else [on_false] x, y = 50, 25 small = x if x < y else y在Python 2.5中引入此语法之前,常见的习惯用法是使用逻辑运算符:
Run Code Online (Sandbox Code Playgroud)[expression] and [on_true] or [on_false]然而,这个成语是不安全的,因为它可以给错误的结果时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]是相同的.您选择使用哪一个是个人偏好.
这可能会给我们提供一个线索,因为有问题的代码被触及了多长时间!