In [1]: a=5
In [2]: print(["is odd", "is even"][a % 2 == 0])
is odd
In [3]: [a%2 == 0]
Out[3]: [False]
我理解的是a % 2 == 0
评估为True
或False
。
因此,如果它是True,则相当于1并使用列表索引它将打印'is even'
。
我已阅读this并了解bool
是int
的一个实例。
因此,当在索引bool
中使用时,评估它的等效数字,即0
或1
。
我的问题
基于直觉,我们可以知道它是int
还是bool
但是Python如何知道?是否有任何标准何时用作bool
以及何时用作int
?来自Python3文档的任何东西都会被附加。
答案 0 :(得分:6)
在Python 2.x中,由于可以重新分配True
和False
,因此无法保证这一点。但是,即使发生这种情况,仍然可以正确返回布尔值True
和布尔False
进行比较。
在Python 3.x中,True和False是关键字,并且始终等于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,例外情况是当转换为字符串时,字符串&#34 ;假"或" True"分别归还。
因此,在Python 2.6和3中,布尔值被明确地视为整数。
答案 1 :(得分:0)
bool
个实例True
和False
与int
个实例0
和1
分开。事实是,在许多情况下,bools的行为就像整数一样。例如True+True
是2.但是如果我们检查它们是否是同一个对象,我们看到它不是:True is 1
。另一方面,True is True
确实如此。这是一个行为类似于整数但打印为True和False并与is
进行不同比较的示例。
class Bool(int):
def __repr__(self):
return 'True' if self==1 else 'False'
https://docs.python.org/3/library/stdtypes.html#bltin-boolean-values