在Python中是否保证False == 0
和True == 1
(假设用户没有重新分配它们)?例如,无论Python的版本是什么(既有版本,也可能是将来的版本),是否以任何方式保证以下代码始终会产生相同的结果?
0 == False # True
1 == True # True
['zero', 'one'][False] # is 'zero'
如能参考官方文件,将不胜感激!
编辑:如许多答案所述,bool
继承自int
。因此,这个问题可以重新表述为:“文档是否正式说明程序员可以依赖从整数继承的布尔值,和值0
和1
?”。这个问题与编写不会因为实现细节而失败的健壮代码有关!
在Python 2.x中,这是不保证的,因为可以重新分配
True
和False
。但是,即使发生这种情况,布尔值True和布尔值False仍然正确返回以进行比较。在Python 3.x中,
True
和False
是关键字,并且始终等于1
和0
。在Python 2和Python 3中的正常情况下:
False
对象的类型是bool
,它是int
的子类:这是示例中} 方法的对象(感谢mark-dickinson)。
['zero', 'one'][False]
起作用的唯一原因。它不适用于不是整数子类的对象,因为列表索引只适用于整数或定义^{编辑:
当前的python版本和python 3版本都是这样。docs for python 2.6和docs for Python 3都说:
在布尔子区域中:
还有,for Python 2:
因此,在Python2.6和3中,布尔值被显式地视为整数。
所以在Python 4出现之前你是安全的。;-)
在Python2.x中,根本不能保证:
所以它可以改变。在Python 3.x中,True、False和None都是reserved words,因此上面的代码不起作用。
一般来说,对于布尔值,您应该假设False总是有一个0整数值(只要您不更改它,如上所述),而True可以有任何其他值。我不一定要依赖任何保证,
True==1
,但在Python3.x上,无论发生什么,情况总是这样。链接到PEP,讨论Python 2.3中的新bool类型:http://www.python.org/dev/peps/pep-0285/。
将bool转换为int时,整数值始终为0或1,但将int转换为bool时,除0以外的所有整数的布尔值均为True。
相关问题 更多 >
编程相关推荐