详解python3中的真值测试
Python  /  管理员 发布于 7年前   160
1. 真值测试
所谓真值测试,是指当一种类型对象出现在if或者while条件语句中时,对象值表现为True或者False。弄清楚各种情况下的真值对我们编写程序有重要的意义。
对于一个对象a,其真值定义为:
以if为例(while是等价的,不做赘述),定义函数truth_test(x)为:
def truth_test(x): if x: return True else: return False
2.对象的真值测试
一般而言,对于一个对象,在满足以下条件之一时,真值测试为False;否则真值测试为True。
(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的情况:
进入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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号