基础语法
1、任何对象都可以进行逻辑值的检测
2、一个对象在默认的情况下均被视为真值,除非以下两种情况:
①、该对象被调用时所属类,定义了 __bool__() 方法且返回 False
②、或者定义了 __len__() 方法且返回 0
3、以下内置对象会被视为假值:
①、被定义为假值的常量: None 和 False
②、任何数值类型的零: 0、 0.0、 0j、 Decimal(0) 、 Fraction(0, 1)
③、空的序列和多项集: ''、 ()、 []、 {}、 set()、 range(0)
4、产生布尔值结果的运算和内置函数总是返回 0 或 False 作为假值,1 或 True 作为真值
(例外:布尔运算 or 和 and 总是返回其中一个操作数)
PS: 布尔运算符 —— and、or 都是短路运算符。 因此对于 and 来说,只有一个参数为真值时,才会对第二个参数求值。
PS: 布尔运算符 not 的优先级比非布尔运算符低,因此 not a == b 会被解读为 not (a == b) 而 a == not b 会引发语法错误。
举例代码
In [1]: bool(None)
Out[1]: False
In [2]: bool({})
Out[2]: False
In [3]: bool(range(0))
Out[3]: False
# 任何对象都可以进行逻辑值的检测、默认情况下会被视为 真值
In [4]: class Test(object): pass
In [5]: bool(Test())
Out[5]: True
# 除非:①、定义了 __bool__() 方法且返回 False
In [6]: class Test(object):
...: def __bool__(self):
...: return False
...:
In [7]: bool(Test())
Out[7]: False
# ②、定义了 __len__() 方法且返回 0
In [8]: class Test(object):
...: def __len__(self):
...: return 0
...:
In [9]: bool(Test())
Out[9]: False