擅长:python、mysql、java
<p>只是提供一些关于阿尔沙吉回答的背景。在</p>
<p>两个布尔值<code>True</code>和<code>False</code>与整数有着奇怪的关系。在</p>
<p>一方面,它们具有不同的字符串表示形式,并且具有不同的标识:</p>
<pre><code>>>> print(True)
True
>>> print(1)
1
>>> True is 1
False
</code></pre>
<p>另一方面,它们在比较和算术下表现为整数:</p>
^{pr2}$
<p>这种行为的原因是兼容性。很久以前,<code>bool</code>类型不存在。”Boolean“运算符复制了C行为,将<code>0</code>和{<cd5>}重用为“false”和“true”。在</p>
<p>最终Guido实现了<a href="http://www.python.org/dev/peps/pep-0285/" rel="noreferrer">this didn't make much sense</a>,并添加了我们知道和喜爱的常量。在</p>
<p>但是有个问题。即使在那时,已经有很多代码将布尔值当作整数来处理。如果布尔操作开始使用“正确”类型,所有这些代码都将中断。在</p>
<p>所以圭多做出了妥协。布尔值有自己的类型<code>bool</code>,并且与整数的显示方式不同。但是在算术运算和比较中,尤其是<code>__eq__</code>和{<cd8>},它们被视为一个整体。所以旧代码将继续工作,而新代码仍然可以利用新的<code>bool</code>类型。在</p>
<p>也许在python4中会发生变化。但是现在,<code>bool</code>是<code>int</code>的一个子类,我们不得不接受它。在</p>
<p>(另一方面,这就是为什么<code>True</code>和{<cd2>}是以标题大小写的,而不是像其他Python关键字那样使用小写的原因之一。)</p>