详解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的组合模式与责任链模式编程示例
Feb 02 Python
python 默认参数问题的陷阱
Feb 29 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
用python找出那些被“标记”的照片
Apr 20 Python
深入理解Python3 内置函数大全
Nov 23 Python
对pyqt5中QTabWidget的相关操作详解
Jun 21 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
如何使用repr调试python程序
Feb 28 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
python3中for循环踩过的坑记录
Dec 14 Python
Django如何创作一个简单的最小程序
May 12 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
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
js实现轮播图特效
2020/05/28 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python利用hook技术破解https的实例代码
2013/03/25 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
Python调用命令行进度条的方法
2015/05/05 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
深入理解python多进程编程
2016/06/12 Python
python中函数传参详解
2016/07/03 Python
python和ruby,我选谁?
2017/09/13 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
用canvas显示验证码的实现
2020/04/10 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
通用C#笔试题附答案
2016/11/26 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
审美与表现自我评价
2015/03/09 职场文书
小学生读书笔记
2015/07/01 职场文书