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