关于Python中(1==1 | 2==1)结果及运算符优先级差异的技术问询
表达式
(1==1 | 2==1)的结果解析 咱们直接把问题拆解开来说:
- 这个表达式的结果确实是False;
- Python执行后会返回
False; - 造成这个结果的核心原因,是Python里的运算符优先级规则——按位或运算符
|的优先级比相等运算符==更高,这也是@MartijnPieters、@Cong-Ma、@Yohboy在评论区给出的关键结论。
详细拆解运算过程
你可能本来想表达的是「1等于1 或者 2等于1」,如果是这个逻辑,正确的写法应该是(1==1) or (2==1)(用逻辑或or),或者给比较表达式加括号的按位或(1==1) | (2==1),这两种写法都会返回True。
但你写的1==1 | 2==1(外层括号只是包裹整个表达式,不改变内部运算顺序),Python会严格按照优先级来执行:
- 先计算
1 | 2(按位或运算),二进制01和10按位或得到11,也就是十进制的3; - 原本的表达式就变成了
1 == 3 == 1,这是Python的链式比较语法,等价于(1 == 3) and (3 == 1); - 显然
1==3和3==1都是False,最终结果就是False。
额外注意:Pandas中的特殊情况
在Pandas里,Python标准的逻辑运算符and/or没法对布尔数组生效,必须使用按位运算符&/|。这时候一定要记得给每个比较表达式单独加括号,不然就会因为优先级问题算出错误的结果,踩和这次一样的坑。
内容的提问来源于stack exchange,提问作者user7867665
相关产品推荐
相关产品推荐

