Python-False == 0和True == 1是实现细节还是由语言保证?

发布于 2021-02-02 23:21:46

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

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

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

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

关注者
0
被浏览
234
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    在Python 2.x的,这是没有保证的,因为它是可能的True,并False重新分配。但是,即使发生这种情况,仍然正确返回布尔True和布尔False进行比较。

    在Python 3.x中,TrueFalse是关键字,并且始终等于1和0。

    通常情况下,在Python 2中,并且始终在Python 3中:

    False对象的类型bool是的子类int

    object
       |
     int
       |
     bool
    

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

    编辑:

    当前的python版本和Python 3都是如此。python 2.6的文档和python 3的文档都说:

    整数有两种类型:[...]整数(int)``[...]布尔值(bool

    在布尔小节中:

    布尔值:它们表示真值False和True布尔值在几乎所有上下文中的行为分别类似于值0和1,但例外是当转换为字符串时,字符串“ False”或“ True”分别返回。

    对于Python 2也有:

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

    因此,布尔值在Python 2.6和3中被明确视为整数。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看