在 Python 2.x 中,这不能保证,因为它可以重新分配True
和False
重新分配。但是,即使发生这种情况,布尔 True 和布尔 False 仍会正确返回以进行比较。
在 Python 3.x中True
andFalse
是关键字,并且总是等于1
and 0
。
在 Python 2 中的正常情况下,在 Python 3 中总是:
False
object 的类型bool
是以下的子类int
:
object
|
int
|
bool
['zero', 'one'][False]
这是在您的示例中起作用的唯一原因。它不适用于不是整数子类的对象,因为列表索引仅适用于整数或定义__index__
方法的对象(感谢mark-dickinson)。
编辑:
当前的 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 出现之前你是安全的。;-)