2024-04-19 18:15:40 发布
网友
python中的Or语句似乎不像在其他语言中那样工作,因为:
-1 < 0 | 0<0
返回False(应该返回true,因为-1<0是True)
False
-1<0
True
有什么问题吗?在
有两个问题:第一,运算符的优先级不是您所期望的。始终可以添加parens使其明确:
>>> (-1 < 0) | (0 < 0) True
另外,single pipe是一个逻辑or,它始终对两个参数求值。其他语言的管道管道是or:
or
|优先于<(请参见Python operator precedence table)。使用括号强制执行所需的操作顺序:
|
<
>>> -1 < 0 | 0 < 0 False >>> -1 < (0 | 0) < 0 False >>> (-1 < 0) | (0 < 0) True
您可能更喜欢使用boolean ^{}运算符(在许多其他语言中相当于||),而不是使用bitwise ^{},这将为您提供所需的无括号优先级:
||
附带说明一下,-1 < 0 < 0(或a < b < c)在Python中执行intuitive thing。它相当于a < b and b < c。大多数其他语言将其计算为(a < b) < c,这通常不是您所期望的。在
-1 < 0 < 0
a < b < c
a < b and b < c
(a < b) < c
有两个问题:第一,运算符的优先级不是您所期望的。始终可以添加parens使其明确:
另外,single pipe是一个逻辑or,它始终对两个参数求值。其他语言的管道管道是
^{pr2}$or
:|
优先于<
(请参见Python operator precedence table)。使用括号强制执行所需的操作顺序:您可能更喜欢使用boolean ^{} 运算符(在许多其他语言中相当于} ,这将为您提供所需的无括号优先级:
^{pr2}$||
),而不是使用bitwise ^{附带说明一下,
-1 < 0 < 0
(或a < b < c
)在Python中执行intuitive thing。它相当于a < b and b < c
。大多数其他语言将其计算为(a < b) < c
,这通常不是您所期望的。在相关问题 更多 >
编程相关推荐