详解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函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
用Python配平化学方程式的方法
Jul 20 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
python爬虫工具例举说明
Nov 30 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
js工具方法弹出蒙版
2013/05/08 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python 性能优化技巧总结
2016/11/01 Python
python实现烟花小程序
2019/01/30 Python
django2.0扩展用户字段示例
2019/02/13 Python
python学生管理系统学习笔记
2019/03/19 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
大学新生军训个人的自我评价
2013/10/03 职场文书
俄语专业毕业生推荐信
2013/10/28 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
大学开学计划书
2014/04/30 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
2014年银行个人工作总结
2014/12/05 职场文书