详解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 相关文章推荐
使用pdb模块调试Python程序实例
Jun 02 Python
Python多线程下载文件的方法
Jul 10 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
基于树莓派的语音对话机器人
Jun 17 Python
Python坐标线性插值应用实现
Nov 13 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
python中的对数log函数表示及用法
Dec 09 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 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
php数组键名技巧小结
2015/02/17 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
关于php开启错误提示的总结
2019/09/24 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
extjs render 用法介绍
2013/09/11 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python计算n的阶乘的方法代码
2019/10/25 Python
Django多个app urls配置代码实例
2020/11/26 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
和平主题的演讲稿
2014/01/12 职场文书
职业生涯规划书范文
2014/03/10 职场文书
工作会议主持词
2014/03/17 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
家长对孩子的寄语
2015/02/26 职场文书
运动会广播稿50字
2015/08/19 职场文书
七年级英语教学反思
2016/02/15 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书