或者python中的语句问题

时间:2010-12-26 14:29:06

标签: python boolean-logic

或者python中的语句似乎不像其他语言那样起作用:

-1 < 0 | 0<0

返回False(应该返回true,因为-1<0True

有什么问题?

2 个答案:

答案 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,这通常不是您所期望的。