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

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

如能参考官方文件,将不胜感激!

Edit:正如许多答案中指出的那样,bool继承自int.因此,这个问题可以重新定义为:"文档是否正式说明程序员可以依赖从整数with the values 102 and 103继承的布尔值?"这个问题与编写不会因为实现细节而失败的健壮代码相关!

推荐答案

在Python 2中.x这是not保证,因为TrueFalse可以重新分配.然而,即使发生这种情况,布尔真和布尔假仍然会正确返回以进行比较.

在Python3.x中,TrueFalse是关键字,始终等于10.

在Python2和Python3中的正常情况下:

False对象的类型为bool,是int的子类:

object
   |
 int
   |
 bool

这是在你的例子中,['zero', 'one'][False]起作用的唯一原因.它不适用于不是integer子类的对象,因为列表索引只适用于整数或定义__index__方法的对象(感谢mark-dickinson).

编辑:

当前的Python版本和Python3的版本都是如此,docs for python 2docs for Python 3都是这样说的:

有两种类型的整数:[……]整数(int)[…]布尔人

在布尔部分:

布尔值:它们代表真值False和True[…]在几乎所有的上下文中,布尔值的行为分别类似于值0和1,但当转换为字符串时,会分别返回字符串"False"或"True".

还有for Python 2个:

在数值上下文中(例如,当用作算术运算符的参数时),它们[False和True]的行为分别类似于整数0和1.

所以在Python2和Python3中,布尔被显式地视为整数.

因此,在Python 4出现之前,您是安全的

Python相关问答推荐

决策树分类器的基础sklearn熵和log_loss标准是否有差异?

tempfile.mkstemp(text=.)参数实际上是什么?

有没有方法可以关闭Python多处理资源跟踪器进程?

Python-Polars:如何用两个值的平均值填充NA?

如何分割我的收件箱,以便连续的数字各自位于自己的收件箱中?

按日期和组增量计算总价值

将词典写入Excel

使用imap-tools时错误,其邮箱地址包含域名中的非默认字符

如何在矩阵上并行化简单循环?

从今天起的future 12个月内使用Python迭代

实现的差异取决于计算出的表达是直接返回还是首先存储在变量中然后返回

如何在Python中使用io.BytesIO写入现有缓冲区?

标题:如何在Python中使用嵌套饼图可视化分层数据?

为什么符号没有按顺序添加?

将输入管道传输到正在运行的Python脚本中

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

Odoo 16使用NTFS使字段只读

转换为浮点,pandas字符串列,混合千和十进制分隔符

CommandeError:模块numba没有属性generated_jit''''

替换现有列名中的字符,而不创建新列