在Python中为false == 0和True == 1是一个实现细节还是由语言保证?

问题:

在Python中保证False == 0True == 1吗?例如,无论什么版本的Python(现有的,可能的,未来的),是否以任何方式保证以下代码将始终产生相同的结果?

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

任何对官方文件的引用将不胜感激!
 编辑:如许多答案所述,boolint继承。因此,该问题可以重写为:“文档是否正式表示程序员可以依赖于从整数继承的布尔值,值为01?”。这个问题与编写强大的代码相关,因为实现细节不会失败!

回答:

在Python 2.x中,这是not保证,因为TrueFalse可能被重新分配。但是,即使发生这种情况,布尔值True和布尔值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 2.6docs for Python 3都说:

有两种类型的整数:[…]整数(int)[…] Booleans(bool)

在布尔分段中:

布尔值:这些表示真值False和True […]布尔值在几乎所有上下文中分别表示为值0和1,异常是当转换为字符串时,字符串“False”或“True “分别归还。

所以布鲁曼在Python 2.6和3中被明确地视为整数。
所以你是安全的,直到Python 4来了。 😉

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

47 − = 45