Python 3.13中|运算符行为异常,是否为预期设计?
这是Python的预期设计行为,而非异常
这不是Python 3.13的异常行为,完全符合语言的设计规范,问题根源在于运算符优先级:
先看你给出的代码:
a=7 b=8 c=7 print(a==c | a==b) print((a==c) | (a==b))
第一条语句的执行逻辑
Python中按位或运算符|的优先级高于相等运算符==,所以a==c | a==b会被解释为:(a == (c | a)) == b
分步计算:
c | a→7 | 7= 7a == 7→7 ==7= TrueTrue == b→True ==8= False
最终输出False。
第二条语句的执行逻辑
括号强制改变了运算顺序,优先执行括号内的比较操作:
a==c→7==7= True(按位运算中会被转换为整数1)a==b→7==8= False(按位运算中会被转换为整数0)1 | 0= 1,对应布尔值True
最终输出True。
补充说明
Python的运算符优先级是语言核心规范的一部分,所有版本(包括3.13)都遵循此规则。按位运算符(|、&、^等)的优先级确实高于比较运算符(==、>、<等),如果需要先执行比较再执行按位运算,必须通过括号明确指定运算顺序。
内容的提问来源于stack exchange,提问作者Euratus
相关产品推荐
相关产品推荐

