布尔值与整数相乘的异常现象求解:为何结果因布尔值类型而异?
问题解析:布尔值与整数相乘的差异原因
这不是布尔值是否为字面量导致的差异,核心原因是Python运算符优先级,你误解了表达式的执行顺序。
代码逐行分析
>>> zz = 0 >>> not(zz) # 直接对zz取反,0的布尔值为False,取反后得到True True >>> not(zz)*4 # 算术运算符*优先级高于逻辑运算符not,实际执行顺序是not (zz * 4) True # 拆解:先计算zz*4=0*4=0,再对0取反,结果为True >>> True*4 # bool是int的子类,True等价于整数1,1*4=4 4
针对你的问题的解答
- 这算不算罕见陷阱?
本质是对运算符优先级不熟悉导致的常见误区,不算特别罕见,不少Python初学者都会在运算符优先级规则上踩坑。 - 相关特性的文档记录:
Python官方文档明确了运算符优先级规则:算术运算符(如*)的优先级高于逻辑运算符(not、and、or);同时也说明bool类型是int的子类,True对应整数1,False对应整数0,因此布尔值可直接与整数进行算术运算。
内容的提问来源于stack exchange,提问作者Amnon Harel
相关产品推荐
相关产品推荐

