详解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 pyinotify日志监控系统处理日志的方法
Mar 08 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
python pygame实现球球大作战
Nov 25 Python
python获取array中指定元素的示例
Nov 26 Python
PyCharm下载和安装详细步骤
Dec 17 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
Python 日期与时间转换的方法
Aug 01 Python
Python日志器使用方法及原理解析
Sep 27 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 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/11/25 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
js模拟类继承小例子
2010/07/17 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python 制作糗事百科爬虫实例
2016/09/22 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python pickle模块实现对象序列化
2019/11/22 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
python怎么判断模块安装完成
2020/06/19 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
运动会入场词50字
2014/02/20 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
2015年调度员工作总结
2015/04/30 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
建国大业观后感800字
2015/06/01 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸