是否可以确保python中的False == 0
和True == 1
(假设它们没有由用户重新分配)?例如,是否以任何方式保证以下代码将始终产生相同的结果,而不管Python的版本如何(既有现有版本,也可能是 future 版本)?
0 == False # True
1 == True # True
['zero', 'one'][False] # is 'zero'
任何对官方文档的引用将不胜感激!
编辑:如许多答案所述,
bool
继承自int
。因此,可以将问题改写为:“文档是否正式声明程序员可以依赖从整数继承的 boolean 值(其值为0
和1
的 boolean 值?”)。这个问题与编写不会因为实现细节而失败的健壮代码有关! 最佳答案
在Python 2.x中,这不能保证,因为可以重新分配True
和False
。但是,即使发生这种情况,仍然会正确返回 boolean True和 boolean False进行比较。
在Python 3.x中,True
和False
是关键字,并且始终等于1
和0
。
通常情况下,在Python 2中,并且始终在Python 3中:False
对象的类型为bool
,它是int
的子类:
object
|
int
|
bool
这是在您的示例中['zero', 'one'][False]
起作用的唯一原因。它不适用于不是整数子类的对象,因为列表索引仅适用于整数或定义 __index__
方法的对象(感谢mark-dickinson)。编辑:
当前的python版本和python 3都是如此。docs for python 2和docs for Python 3都说:
并在 boolean 小节中:
还有for Python 2:
因此, boolean 值在Python 2和3中被明确视为整数。
因此,在Python 4出现之前,您是安全的。 ;-)