理解在布尔值上使用非布尔运算符

时间:2018-03-26 12:11:05

标签: python python-3.x boolean-logic

我一直在尝试在布尔值上使用+-*/运算符,但我不明白我得到的奇怪输出结果:

使用+的第一个示例:

>>> 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'>
>>>

返回一个浮点数。

发生了什么事。为什么我在使用非布尔操作符时得到这些整数和浮点输出,而不像我期望的那样得到一些布尔运算符?

2 个答案:

答案 0 :(得分:1)

基本上,True等于整数1,False等于整数0。 这是因为Boolean是int的子类。

您可以通过将bool转换为整数来获取这些值:

int(True)
int(False)

答案 1 :(得分:1)

booleanint的子类。 FalseTrue分别有效。 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)

floatint,因为即使在整数之间也存在python 3浮点除法。如果您需要type(a // a),请执行<p class="phone">09123456789</p>