布尔作为int?python是如何评估的

Aja*_*jay 3 python

In [1]: a=5

In [2]: print(["is odd", "is even"][a % 2 == 0])
is odd

In [3]: [a%2 == 0]
Out[3]: [False]
Run Code Online (Sandbox Code Playgroud)

我理解的是a % 2 == 0评估TrueFalse.

因此,如果它是True,则相当于1并使用列表索引它将打印'is even'.

我已经读过这个,并且知道bool是一个实例int.

因此,当在索引中使用时,bool评估它的等价数即ie 01.

我的问题

基于直觉,我们可以知道它是否会成为一个int或多个bool

但是Python如何知道呢?是否有任何标准何时使用as bool和何时使用int?Python3文档中的任何内容都会被附加.

jay*_*tar 6

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

在Python 3.x中,True和False是关键字,并且始终等于10.

在Python 2中的正常情况下,始终在Python 3中:

Falseobject的类型bool是以下的子类int:

 object
   |
  int
   |
  bool
Run Code Online (Sandbox Code Playgroud)

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

编辑:

对于当前的Python版本和Python 3的版本都是如此.Python 2.6的文档和Python 3的文档都说:

有两种类型的整数:[...] Integers(int)[...] Booleans(bool)和布尔子部分:

布尔值:这些表示真值False和True [...]布尔值在几乎所有上下文中的行为分别类似于值0和1,例外的是当转换为字符串时,字符串"False"或"True" "分别归还.

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