详解python3中的真值测试


Posted in Python onAugust 13, 2018

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python对象的深拷贝和浅拷贝详解
Aug 25 Python
python 统计代码行数简单实例
May 04 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
python实现聚类算法原理
Feb 12 Python
Python读写docx文件的方法
May 08 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
Jun 13 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
python自动生成sql语句的脚本
Feb 24 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 Python
python神经网络学习 使用Keras进行回归运算
May 04 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 #Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 #Python
python删除字符串中指定字符的方法
Aug 13 #Python
Django contenttypes 框架详解(小结)
Aug 13 #Python
Python中的Numpy矩阵操作
Aug 12 #Python
浅谈python之新式类
Aug 12 #Python
详解Django中类视图使用装饰器的方式
Aug 12 #Python
You might like
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python实现FTP循环上传文件
2020/03/20 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
个人安全生产承诺书
2014/05/22 职场文书
售房协议书
2014/08/19 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android