详解python3中的真值测试

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python中使用Boolean操作符做真值测试实例

    在Python中,任何类型的对象都可以做真值测试,并且保证返回True或者False. 以下几种值(不论类型)在真值测试中返回False: 1.None 2.False 3.任何类型的数字0,包括0,0.0,0L,0j 4.空的序列(sequence)或者映射(mapping)类型对象 5.对于用户自定义类型的对象,如果其类定义了__nonzero__() 或者 __len__()特殊方法并且返回False或者0 对于最后一条规则,有几点需要说明: 1.如果类没有定义这两个方法中的任何一个,则这

  • 详解python3中的真值测试

    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

  • 详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数

    hasattr()函数 hasattr()函数用于判断是否包含对应的属性 语法: hasattr(object,name) 参数: object--对象 name--字符串,属性名 返回值: 如果对象有该属性返回True,否则返回False 示例: class People: country='China' def __init__(self,name): self.name=name def people_info(self): print('%s is xxx' %(self.name))

  • 详解Python3中的 input() 函数

    一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: 3.语法:input("提示信息:") . 二.运用演示: 1.接收任意输入,并返回字符串类型: >>>height = input("输入身高:")          #运行 输入身高: 170                      #输入整数170 >>> type(a)

  • 详解Python3中的正则表达式的基本用法

    正则表达式 本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索.替换.匹配验证都不在话下. 当然对于爬虫来说,有了它,我们从HTML里面提取我们想要的信息就非常方便了. 实例引入 说了这么多,可能我们对它到底是个什么还是比较模糊,下面我们就用几个实例来感受一下正则表达式的用法. 我们打开开源中国提供的正则表达式测试工具http://tool.oschina.net/regex/,打开之后我们可以输入待匹配的文本,然后选择常用的

  • 详解Python3中的迭代器和生成器及其区别

    介绍 本篇将介绍Python3中的迭代器与生成器,描述可迭代与迭代器关系,并实现自定义类的迭代器模式. 迭代的概念 上一次输出的结果为下一次输入的初始值,重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值 注:循环不是迭代 while True: #只满足重复,因而不是迭代 print('====>')  迭代器 1.为什么要有迭代器? 对于没有索引的数据类型,必须提供一种不依赖索引的迭代方式. 2.迭代器定义: 迭代器:可迭代对象执行__iter__方法,得到的结果

  • 详解python3中socket套接字的编码问题解决

    一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = 21567 #随机提供个端口号 BUFSIZ = 1024 # 缓冲区大小设置为1KB,可以根据网络性能和程序需要改变这个容量 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配了 TCP 服务器套接字 tcpSerSo

  • 详解Python3中setuptools、Pip安装教程

    1.安装setuptools 命令如下: wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 tar -zxvf setuptools-19.6.tar.gz cd setuptools-19.6 python3 setup.py build python3 setup

  • 详解Python3 中的字符串格式化语法

    一.旧式的字符串格式化 % 操作符 参考以下示例: >>> name = "Eric" >>> "Hello, %s." % name 'Hello, Eric.' 当有多个变量需要插入到字符串中时: >>> name = "Eric" >>> age = 74 >>> "Hello, %s. You are %s." % (name,

  • 详解Python3中字符串中的数字提取方法

    逛到一个有意思的博客在里面看到一篇关于ValueError: invalid literal for int() with base 10错误的解析,针对这个错误,博主已经给出解决办法,使用的是re.sub 方法 totalCount = '100abc' totalCount = re.sub("\D", "", totalCount) 但是没有说明什么含义,于是去查了其他的资料,做一下记录: 在Python3.5.2 官方文档re模块中sub函数的定义是: re

  • 详解python3中zipfile模块用法

    一.zipfile模块的简述 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的, 在这里对zipfile的使用方法做一些记录.即方便自己也方便别人. zipfile里有两个非常常用的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了. ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的. 下面我们就来介绍这

随机推荐