详解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 07 Python
Python实现从脚本里运行scrapy的方法
Apr 07 Python
在Python下尝试多线程编程
Apr 28 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
python查看模块,对象的函数方法
Oct 16 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
Python访问Redis的详细操作
Jun 26 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHP新手上路(七)
2006/10/09 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
py-charm延长试用期限实例
2019/12/22 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
python中封包建立过程实例
2021/02/18 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
语文教学随笔感言
2014/02/18 职场文书
教学改革实施方案
2014/03/31 职场文书
民主生活会发言材料
2014/10/20 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
导游词之无锡唐城
2019/12/12 职场文书