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评估True或False.
因此,如果它是True,则相当于1并使用列表索引它将打印'is even'.
我已经读过这个,并且知道bool是一个实例int.
因此,当在索引中使用时,bool评估它的等价数即ie 0或1.
我的问题
基于直觉,我们可以知道它是否会成为一个int或多个bool
但是Python如何知道呢?是否有任何标准何时使用as bool和何时使用int?Python3文档中的任何内容都会被附加.
在Python 2.x的,这是不能保证,因为它是可能的True,并False重新分配.但是,即使发生这种情况,仍然可以正确返回boolean True和boolean False进行比较.
在Python 3.x中,True和False是关键字,并且始终等于1和0.
在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中,布尔值被明确地视为整数.