只有以下值得布尔值为False
1)None
2)False
3)任何类型数字0(包括整数0,浮点0.0,复数0j (0+0j),十进制数Decimal(0),分数Fraction(0, 1))
4)空的字符串、序列(sequence)或映射类(mapping)型对象
以上执行结果为:
5)对于用户自定义类型的对象,如果其类定义了__bool__() 或者 __len__()特殊方法并且返回False或者0
对于最后一条规则,有几点需要说明:
①如果类没有定义这两个方法中的任何一个,则这种类型的对象真值测试时总是为True
②如果类同时定义了__bool__() 和 __len__(),只会参考__bool__()的返回值
class A:
def __len__(self):
print('A._len__()')
return 0
def __bool__(self):
print('A._bool__()')
return True
if __name__ == '__main__':
print('A is True' if A() else 'A is not True')
print(bool(A()))
以上执行结果为: