关于布尔值使用算术运算符(+、-、*、/)的结果疑问
为什么Python中布尔值做算术运算返回整数?
嘿,这个问题其实戳中了Python布尔类型的一个小细节——bool是int的子类!也就是说,True本质上就是整数1,False就是整数0。当你对布尔值使用+、-、*、/这类算术运算符时,Python会自动把它们转换成整数来执行运算,结果自然就是整数类型啦。
咱们结合你的例子拆解一下:
加法运算的逻辑
>>> a = True # 等价于 a = 1 >>> b = False # 等价于 b = 0 >>> a + b # 1 + 0 = 1 1 >>> a + a # 1 + 1 = 2 2 >>> b + b # 0 + 0 = 0 0
你验证type(a + a)得到<class 'int'>也完全合理,因为运算后返回的是整数对象,而非布尔对象。
减法运算的逻辑
同样的道理,减法也是基于整数计算:
>>> a - b # 1 - 0 = 1 1 >>> a - a # 1 - 1 = 0 0 >>> b - b # 0 - 0 = 0 0
如果你的需求是得到布尔类型的结果,建议用Python的逻辑运算符(and、or、not),或者把算术运算的结果用bool()转换:
>>> bool(a + b) # 非零整数转布尔为True True >>> a and b # 逻辑与,False和True的与是False False
内容的提问来源于stack exchange,提问作者Xantium
相关产品推荐
相关产品推荐

