Python比较运算出现非预期结果,位运算混用优先级问题求解
核心原因:运算符优先级错误 + 运算符误用
你遇到的问题是两个错误叠加导致的:
- 误用了位运算符
&/|代替布尔逻辑运算符and/or - 位运算符的优先级远高于比较运算符,导致运算顺序完全不符合你的预期
具体运算过程拆解
你最后一个不符合预期的表达式(250>150 & (0 > 55000 | 150 > 280))实际执行顺序如下:
- 位运算符优先级高于比较运算符,优先计算
55000 | 150,得到数值结果55286 - 原括号内的表达式变为链式比较
0 > 55286 > 280,运算结果为False - 继续计算优先级更高的
150 & False,布尔值False在数值运算中会被转为0,因此150 & 0的结果为0 - 最后执行比较运算
250 > 0,最终结果为True,和你预期的布尔逻辑运算结果完全不同
修复方案
- 布尔逻辑判断场景请使用专门的逻辑运算符
and(与)、or(或),不要使用位运算符,修改后的表达式为:
(250>150) and ( (0 > 55000) or (150 > 280) )
运算结果为预期的False
2. 如果因特殊场景必须使用位运算符,请给所有比较运算的表达式单独加括号,强制指定运算顺序:
(250>150) & ( (0 > 55000) | (150 > 280) )
内容的提问来源于stack exchange,提问作者DanGoodrick
相关产品推荐
相关产品推荐

