详解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 10 Python
python使用xmlrpc实例讲解
Dec 17 Python
python uuid模块使用实例
Apr 08 Python
python中import学习备忘笔记
Jan 24 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
python绘制封闭多边形教程
Feb 18 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 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
PHP 采集程序 常用函数
2008/12/18 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
Python常用小技巧总结
2015/06/01 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
如何通过python计算圆周率PI
2020/11/11 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
大客户销售经理职责
2013/12/04 职场文书
营运督导岗位职责
2015/04/10 职场文书
防溺水主题班会教案
2015/08/12 职场文书
爱国教育主题班会
2015/08/14 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android