《Python 语法浅析:真值校验的标准》

356 阅读1分钟

基础语法

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