详解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写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
python查询mysql中文乱码问题
Nov 09 Python
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
python使用matplotlib绘制雷达图
Oct 18 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 Python
详解python字符串驻留技术
May 21 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
PHP常见漏洞攻击分析
2016/02/21 PHP
php批量修改表结构实例
2017/05/24 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
javascript 主动派发事件总结
2011/08/09 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
Javascript中replace()小结
2015/09/30 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
python类定义的讲解
2013/11/01 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
python 导入数据及作图的实现
2019/12/03 Python
python实现数字炸弹游戏程序
2020/07/17 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
基层党支部公开承诺书
2014/05/29 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
2014年客房部工作总结
2014/11/22 职场文书
2014年路政工作总结
2014/12/10 职场文书
员工离职感谢信
2015/01/22 职场文书
董事长开业致辞
2015/07/29 职场文书
法制主题班会教案
2015/08/13 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书