详解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 流程控制实例代码
Sep 25 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
Django框架表单操作实例分析
Nov 04 Python
动态设置django的model field的默认值操作步骤
Mar 30 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Python绘制组合图的示例
Sep 18 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程序
2006/10/09 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
javascript  Error 对象 错误处理
2008/05/18 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
angular分页指令操作
2017/01/09 Javascript
layui表格实现代码
2017/05/20 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
python实现微信打飞机游戏
2020/03/24 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
教育系毕业生中文求职信范文
2013/10/06 职场文书
大学生年度自我鉴定
2013/10/31 职场文书
大学生求职推荐信
2013/11/27 职场文书
酒店管理求职信范文
2014/04/06 职场文书
学习保证书范文
2014/04/30 职场文书
团日活动总结报告
2014/06/25 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
Pandas 数据编码的十种方法
2022/04/20 Python