详解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异步任务队列示例
Apr 01 Python
Python的Flask框架中@app.route的用法教程
Mar 31 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
Python深入06——python的内存管理详解
Dec 07 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
使用 Python 实现微信公众号粉丝迁移流程
Jan 03 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
python3 webp转gif格式的实现示例
Dec 10 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
Python开发五子棋小游戏
Apr 28 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
详解python3中的真值测试
2018/08/13 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
中文系师范生自荐信
2013/10/01 职场文书
大学自我鉴定
2013/12/20 职场文书
护士演讲稿范文
2014/01/05 职场文书
《春晓》教学反思
2014/04/20 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
商务宴会祝酒词
2015/08/11 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
详解Oracle块修改跟踪功能
2021/11/07 Oracle
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python