详解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实现设置windows桌面壁纸代码分享
Mar 28 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
对Python协程之异步同步的区别详解
Feb 19 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
python二元表达式用法
Dec 04 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
anaconda python3.8安装后降级
Jun 11 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简单实现MVC
2015/02/05 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
python实现的udp协议Server和Client代码实例
2014/06/04 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
网站出售协议书范文
2014/10/10 职场文书
个人求职意向书
2015/05/11 职场文书
高温慰问简报
2015/07/21 职场文书
Django基础CBV装饰器和中间件
2022/03/22 Python
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技