是否可以确保python中的False == 0True == 1(假设它们没有由用户重新分配)?例如,是否以任何方式保证以下代码将始终产生相同的结果,而不管Python的版本如何(既有现有版本,也可能是 future 版本)?

0 == False  # True
1 == True   # True
['zero', 'one'][False]  # is 'zero'

任何对官方文档的引用将不胜感激!

编辑:如许多答案所述,bool继承自int。因此,可以将问题改写为:“文档是否正式声明程序员可以依赖从整数继承的 boolean 值(其值为01的 boolean 值?”)。这个问题与编写不会因为实现细节而失败的健壮代码有关!

最佳答案

在Python 2.x中,这不能保证,因为可以重新分配TrueFalse。但是,即使发生这种情况,仍然会正确返回 boolean True和 boolean False进行比较。
在Python 3.x中,TrueFalse是关键字,并且始终等于10
通常情况下,在Python 2中,并且始终在Python 3中:False对象的类型为bool,它是int的子类:

object
   |
 int
   |
 bool
这是在您的示例中['zero', 'one'][False]起作用的唯一原因。它不适用于不是整数子类的对象,因为列表索引仅适用于整数或定义 __index__ 方法的对象(感谢mark-dickinson)。
编辑:
当前的python版本和python 3都是如此。docs for python 2docs for Python 3都说:

并在 boolean 小节中:

还有for Python 2:

因此, boolean 值在Python 2和3中被明确视为整数。
因此,在Python 4出现之前,您是安全的。 ;-)

10-04 23:42
查看更多