详解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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
详解python while 函数及while和for的区别
Sep 07 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
Django 多环境配置详解
May 14 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
基于python连接oracle导并出数据文件
Apr 28 Python
python中threading开启关闭线程操作
May 02 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 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使用数组实现队列
2012/02/05 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
jquery键盘事件介绍
2011/01/31 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python 异或加密字符串的实例
2018/10/14 Python
python实现简易数码时钟
2021/02/19 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
如何在python中判断变量的类型
2020/07/29 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
在校硕士自我鉴定
2014/01/23 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
委托证明模板
2014/09/16 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2015年度物流工作总结
2015/04/30 职场文书
小学德育工作总结2015
2015/05/12 职场文书
工作经历证明范本
2015/06/15 职场文书
职工宿舍管理制度
2015/08/05 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Java后台生成图片的完整步骤
2021/08/04 Java/Android
python绘制云雨图raincloud plot
2022/08/05 Python