是否保证False == 0and True == 1, 在 Python 中(假设它们没有被用户重新分配)?例如,是否以任何方式保证以下代码将始终产生相同的结果,无论 Python 的版本是什么(现有的和可能的未来版本)?
False == 0
True == 1
0 == False # True 1 == True # True ['zero', 'one'][False] # is 'zero'
任何对官方文档的参考将不胜感激!
编辑 :正如许多答案中所述,bool继承自int. 因此,这个问题可以改写为:“文档是否正式说程序员可以依赖从整数继承的布尔值, 以及值0和1?”。这个问题与编写不会因为实现细节而失败的健壮代码有关!
bool
int
0
1
在 Python 2.x 中,这 不能 保证,因为它可以重新分配True和False重新分配。但是,即使发生这种情况,布尔 True 和布尔 False 仍会正确返回以进行比较。
True
False
在 Python 3.x中TrueandFalse是关键字,并且总是等于1and 0。
在 Python 2 中的正常情况下,在 Python 3 中总是:
Falseobject 的类型bool是以下的子类int:
object | int | bool
['zero','one'][False]这是在您的示例中起作用的唯一原因。它不适用于不是整数子类的对象,因为列表索引仅适用于整数或定义__index__方法的对象。
['zero','one'][False]
__index__
编辑:
当前的 python 版本和 Python 3 的版本都是如此。python 2的文档和 Python 3的文档都说:
整数有两种类型: […] 整数 (int) […] 布尔 (bool)
在布尔小节中:
布尔值:它们代表真值 False 和 True […] 在几乎所有上下文中,布尔值的行为分别类似于值 0 和 1,例外的是当转换为字符串时,字符串“False”或“True” ” 分别返回。
还有,对于 Python 2:
在数字上下文中(例如,当用作算术运算符的参数时),它们 [False 和 True] 的行为分别类似于整数 0 和 1。
所以布尔值在 Python 2 和 3 中被明确地视为整数。
所以在 Python 4 出现之前你是安全的。;-)