1. 真值测试
所谓真值测试,是指当一种类型对象出现在if或者while条件语句中时,对象值表现为True或者False。弄清楚各种情况下的真值对我们编写程序有重要的意义。
对于一个对象a,其真值定义为:
- True : 如果函数truth_test(a)返回True。
- False:如果函数truth_test(a)返回False。
以if为例(while是等价的,不做赘述),定义函数truth_test(x)为:
1
2
3
4
5
|
def truth_test(x):
if x:
return True
else :
return False
|
2.对象的真值测试
一般而言,对于一个对象,在满足以下条件之一时,真值测试为False;否则真值测试为True。
- 其内置函数__bool__()返回False
- 其内置函数__len__()返回0
(1)以下类型对象真值测试为真:
1
2
|
class X:
pass
|
(2)以下真值测试为假:
1
2
3
|
class Y:
def __bool__( self ):
return False
|
(3)以下真值测试为假:
1
2
3
|
class Z:
def __len__( self ):
return 0
|
进入python3脚本环境,测试过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
>>> 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
>>>
|
3. 常见对象的真值
下面是常见的真值为False的情况:
- 常量:None and False.
- 数值0值: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
- 序列或者集合为空:'', (), [], {}, set(), range(0)
进入python3脚本环境,测试过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
>>> 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.一些有意思的例子
下面是一些有意思的例子,原理不超出前面的解释。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
>>> 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
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/sword03/p/9465296.html