详解python3中的真值测试
程序员文章站
2023-10-27 18:12:04
1. 真值测试
所谓真值测试,是指当一种类型对象出现在if或者while条件语句中时,对象值表现为true或者false。弄清楚各种情况下的真值对我们编写程序有重要的...
1. 真值测试
所谓真值测试,是指当一种类型对象出现在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 >>>
3. 常见对象的真值
下面是常见的真值为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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。