或者python中的语句似乎不像其他语言那样起作用:
-1 < 0 | 0<0
返回False
(应该返回true,因为-1<0
是True
)
有什么问题?
答案 0 :(得分:9)
有两个问题:首先,运营商的优先级不是您所期望的。您可以随时添加parens以使其明确:
>>> (-1 < 0) | (0 < 0)
True
此外,单管道是逻辑的,或者一直评估它的两个参数。与其他语言的管道相当的是or
:
>>> -1 < 0 or 0 < 0
True
答案 1 :(得分:1)
|
优先于<
(请参阅Python operator precedence table)。使用括号强制执行所需的操作顺序:
>>> -1 < 0 | 0 < 0
False
>>> -1 < (0 | 0) < 0
False
>>> (-1 < 0) | (0 < 0)
True
您可能更喜欢使用boolean or
运算符(相当于许多其他语言中的||
)而不是bitwise |
,它将为您提供所需的优先级而不带括号:
>>> -1 < 0 or 0 < 0
True
作为旁注,-1 < 0 < 0
(或a < b < c
)在Python中执行intuitive thing。它相当于a < b and b < c
。大多数其他语言会将其评估为(a < b) < c
,这通常不是您所期望的。