我一直在尝试在布尔值上使用+
,-
,*
,/
运算符,但我不明白我得到的奇怪输出结果:
使用+
的第一个示例:
>>> a = True
>>> b = False
>>> a + b
1
>>> a + a
2
>>> b + b
0
很明显,我没有获得布尔输出,而且确实如此:
>>> type(a + a)
<class 'int'>
>>>
使用-
的第二个示例:
>>> a - b
1
>>> a - a
0
>>>b - b
0
所有整数再次。
使用*
的第三个示例:
>>> a * a
1
>>> a * b
0
>>> b * b
0
>>>
最后使用/
(返回错误):
>>> a / a
1.0
>>> a / b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> b / b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>>
有趣的是:
>>> type(a / a)
<class 'float'>
>>>
返回一个浮点数。
发生了什么事。为什么我在使用非布尔操作符时得到这些整数和浮点输出,而不像我期望的那样得到一些布尔运算符?
答案 0 :(得分:1)
基本上,True等于整数1,False等于整数0。 这是因为Boolean是int的子类。
您可以通过将bool转换为整数来获取这些值:
int(True)
int(False)
答案 1 :(得分:1)
boolean
是int
的子类。 False
和True
分别有效。 0和1值。
执行添加时,使用int
的添加方法,布尔值不会重新定义__add__
或__sub__
(或mul或div ...),因此结果为int
类型的False + True
类型,即使False + False
或>>> bool.__add__ is int.__add__
True
>>> bool.__sub__ is int.__sub__
True
适合布尔类型(根据范围返回整数或布尔值的加法方法也会有点奇怪)。
type(a / a)
和float
是int
,因为即使在整数之间也存在python 3浮点除法。如果您需要type(a // a)
,请执行<p class="phone">09123456789</p>