详解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学习资料
Feb 08 Python
Python引用传值概念与用法实例小结
Oct 07 Python
儿童编程python入门
May 08 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
tensorflow的计算图总结
Jan 12 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Python 列表推导式需要注意的地方
Oct 23 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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/12/05 PHP
Zend Guard一些常见问题解答
2008/09/11 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python退火算法在高次方程的应用
2018/07/26 Python
对python:print打印时加u的含义详解
2018/12/15 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python里运用私有属性和方法总结
2019/07/08 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
师范毕业生求职自荐信
2013/09/25 职场文书
中专毕业生自荐信范文
2013/11/28 职场文书
保护黄河倡议书
2014/05/16 职场文书
2014年底工作总结
2014/12/15 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
思想工作总结范文
2015/08/12 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2016国培学习心得体会
2016/01/08 职场文书