详解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 16 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
Django框架中方法的访问和查找
Jul 15 Python
浅谈Python 集合(set)类型的操作——并交差
Jun 30 Python
python中通过预先编译正则表达式提高效率
Sep 25 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
python框架flask表单实现详解
Nov 04 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
Python的collections模块真的很好用
Mar 01 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获取金书网的书名的实现代码
2010/06/11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
python脚本内运行linux命令的方法
2015/07/02 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python 链接和操作 memcache方法
2017/03/04 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
Python中psutil的介绍与用法
2019/05/02 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
司马光教学反思
2014/02/01 职场文书
小班秋游活动方案
2014/02/22 职场文书
小学一年级学生评语
2014/04/22 职场文书
会计岗位工作总结
2015/08/12 职场文书
早安问候语大全
2015/11/10 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫