Python中的布尔值是整数的子类。布尔构造函数-
bool
。bool类继承自int类。
issubclass(bool,int) // will return True
isinstance(True,bool) , isinstance(False,bool) //they both True
True
和
False
是单例对象。它们将在应用程序的整个生命周期内保持相同的内存地址。当您键入
True
时, python内存管理器将检查其地址并获取值1。对于
False
, 其值为0。
您可以使用
is
(标识)或
==
(等于)运算符将任何布尔表达式与
True
或
False
进行比较。
int(True) == 1
int(False) == 0
但是请注意,
True
和1是不同的对象。您可以检查:
id(True) == id(1) // will return False
您也可以轻松看到
True > False // returns true cause 1>0
任何整数运算都可以对布尔值进行运算。
True + True + True =3
Python中的所有对象都有一个关联的真值。每个对象都有一个
True
值, 除了:
没有
说谎的
任何数字类型均为0(0. 0.0. 0+0j等)
空序列(列表, 元组, 字符串)
空的显示类型(字典, 馆藏等)
一个实现
__bool__
或
__len__
方法并返回
False
或
0
的自定义类。
Python中的每个类都有由特殊实例方法定义的真值:
__bool__(self) OR
__len__
当您调用
bool(x)
时, python实际上
x.__bool__()
如果
x
实例没有此方法, 它将执行
x.__len__()
如果不存在, 则默认值为
True
。
例如, 对于类
int
, 我们可以如下定义
bool
:
def __bool__(self):
return self != 0
对于布尔值(100),
100 !=0
将返回
True
。所以
布尔值(100)==true
您可以轻松检查
bool(0)
是否为
False
。这样, 对于int类的实例, 只有0将返回False。
另一个例子=bool([1,2,3])
[1,2,3]
没有特定的方法
__bool__()
, 但是具有
__len__()
, 并且由于其长度大于0, 它将返回
True
。现在您可以了解为什么空白列表返回
False
。