详解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判断、获取一张图片主色调的2个实例
Apr 10 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
python实现字符串和数字拼接
Mar 02 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 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中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
看了就知道什么是JSON
2007/12/09 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
javascript中floor使用方法总结
2019/02/02 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python魔法方法功能与用法简介
2019/04/04 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
群胜软件Java笔试题
2012/09/29 面试题
出纳员岗位职责风险
2014/03/06 职场文书
黄金搭档广告词
2014/03/21 职场文书
大学开学计划书
2014/04/30 职场文书
活动总结报告范文
2014/05/04 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
特此通知格式
2015/04/27 职场文书
董事长开业致辞
2015/07/29 职场文书