- 真值测试
所谓真值测试,是指当一种类型对象出现在if或者while条件语句中时,对象值表现为True或者False。弄清楚各种情况下的真值对我们编写程序有重要的意义。
对于一个对象a,其真值定义为:
True : 如果函数truth_test(a)返回True。
False:如果函数truth_test(a)返回False。
以if为例(while是等价的,不做赘述),定义函数truth_test(x)为:
def truth_test(x):
if x:
return True
else:
return False
2.对象的真值测试
一般而言,对于一个对象,在满足以下条件之一时,真值测试为False;否则真值测试为True。
其内置函数bool()返回False
其内置函数len()返回0
(1)以下类型对象真值测试为真:
class X:
pass
(2)以下真值测试为假:
class Y:
def bool(self):
return False
(3)以下真值测试为假:
class Z:
def len(self):
return 0
进入python3脚本环境,测试过程如下:
class X:
… pass
…
class Y:
… def bool(self):
… return False
…
class Z:
… def len(self):
… return 0
…
def truth_test(x):
… if x:
… return True
… else:
… return False
…
x = X()
y = Y()
z = Z()
truth_test(x)
True
truth_test(y)
False
truth_test(z)
False
- 常见对象的真值
下面是常见的真值为False的情况:
常量:None and False.
数值0值: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
序列或者集合为空:”, (), [], {}, set(), range(0)
进入python3脚本环境,测试过程如下:
truth_test(None)
False
truth_test(False)
False
truth_test(0)
False
truth_test(0.0)
False
truth_test(0j) #复数
False
truth_test(Decimal(0)) #十进制浮点数
False
truth_test(Fraction(0,1)) #分数
False
truth_test(Fraction(0,2)) #分数
False
truth_test(”)
False
truth_test(())
False
truth_test({})
False
truth_test(set())
False
truth_test(range(0)) #序列
False
truth_test(range(2,2)) #序列
False
此外的其它取值,真值测试应当为True。
4.一些有意思的例子
下面是一些有意思的例子,原理不超出前面的解释。
if 1 and Fraction(0,1):
… print(True)
… else:
… print(False)
…
False
if 1 and ():
… print(True)
… else:
… print(False)
…
False
if 1 and range(0):
… print(True)
… else:
… print(False)
…
False
if 1 and None:
… print(True)
… else:
… print(False)
…
False
if 1+2j and None:
… print(True)
… else:
… print(False)
…
False