Python内置类型(1)——真值测试
python中任何对象都能直接进行真假值的测试,用于if或者while语句的条件判断,也可以做为布尔逻辑运算符的操作数
python中任何对象都能直接进行真假值的测试,而不需要额外的类型转换
这一点是和其它语言不一样的。比如C#,一个非bool的对象,如果要进行逻辑判断则必须先强制进行类型转换、或者调用对象的自身判断方法进行判断。
var message = " ";
if (message.IsNullOrEmpty()){
...
}
而python中可以直接对对象进行逻辑判断无需类型转换
message = " "
if message :
pass
对象的真假值测试的结果,要么是True,要么是False
布尔类型的值只有True和False,所以对象是不管什么类型,其真假值的测试结果必然是True和False中的一个。在python中真假值的测试结果可以通过调用内置函数bool来确认。
>>> bool(' ')
True
>>> bool('')
False
以下的内置对象会被视为False值
- None
>>> bool(None)
False
- False
>>> bool(False)
False
- 任何数值类型的零,例如,0、0.0、0j
>>> bool(0),bool(0.0),bool(0j)
(False, False, False)
- 任何空序列,例如,”、()、[]
>>> bool(''),bool(()),bool([])
(False, False, False)
- 任何空映射,例如,{}
>>> bool({})
False
内置对象除了以上值之外的都是真值
常量NotImplemented、Ellipsis、True是真值
>>> bool(NotImplemented)
True
>>> bool(Ellipsis)
True
>>> bool(True)
True
对于用户自定义的类,其真假值取决于该类有没有定义__bool__()或__len__(),以及这两个方法返回的值
如果自定义类未没有定义__bool__()和__len__()方法,则该类的实例对象的真假值测试总是True。
>>> class A:
pass
>>> a = A()
>>> bool(a)
True
如果自定义类只定义了__bool__()方法,则该类的实例对象的真假值测试结果为__bool__()方法返回的结果
>>> class B():
def __init__(self,name):
self.name = name
def __bool__(self):
return bool(self.name)
>>> b1 = B('')
>>> bool(b1)
False
>>> b2 = B('jay')
>>> bool(b2)
True
如果自定义类只定义了__len__()方法,则该类的实例对象的真假值测试结果为__len__()方法返回的结果是否为整数0
>>> class C():
def __init__(self,name):
self.name = name
def __len__(self):
return len(self.name)
>>> c1 = C('')
>>> bool(c1)
False
>>> c2 = C('jay')
>>> bool(c2)
True
如果自定义类同时定义了__bool__()和__len__()方法,则该类的实例对象的真假值测试结果为__bool__()方法返回的结果,即__bool__()方法优先级高于__len__()方法。
>>> class D():
def __len__(self):
return 1
def __bool__(self):
return False
>>> d = D()
>>> bool(d)
False
>>> class E():
def __len__(self):
return 0
def __bool__(self):
return True
>>> e = E()
>>> bool(e)
True
欢迎关注公众号交流:

Python内置类型(1)——真值测试的更多相关文章
- 为什么继承 Python 内置类型会出问题?!
本文出自"Python为什么"系列,请查看全部文章 不久前,Python猫 给大家推荐了一本书<流畅的Python>(点击可跳转阅读),那篇文章有比较多的"溢 ...
- Python内置类型性能分析
Python内置类型性能分析 timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass' ...
- Python 内置类型 dict, list,线程安全吗
近段时间发现一个 Python 连接数据库的连接是线程不安全的,结果惹得我哪哪儿都怀疑变量的多线程是否安全的问题,今天终于找到了正确答案,那就是 Python 内置类型 dict,list ,tupl ...
- python内置类型详细解释
文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...
- Python——内置类型
Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...
- Python内置类型(2)——布尔运算
python中bool运算符按优先级顺序分别有or.and.not, 其中or.and为短路运算符 not先对表达式进行真值测试后再取反 not运算符值只有1个表达式,not先对表达式进行真值测试后再 ...
- 易被忽略的Python内置类型
Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们. 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些"不同寻常&quo ...
- Python内置类型——set
Python中,内置类型set和frozenset用来表示集合,我们首先查看这两个类型支持的特殊对象,从而可以理解他们的特性. >>> dir(set) ['__and__', '_ ...
- 3、python内置类型(0529)
python的内置对象类型以及支持的运算 python对象的相关术语 python程序中保存的所有数据都是围绕对象这个概念展开的 程序中存储的所有数据都是对象 每个对象都有一个身份.一个类型和一个值 ...
随机推荐
- hmtl div水平、垂直居中
最近写网页经常需要将div在屏幕中居中显示,遂记录下几个常用的方法,都比较简单.水平居中直接加上<center>标签即可,或者设置margin:auto;当然也可以用下面的方法 下面说两种 ...
- 结构体指offsetof宏详细解析
1.#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER) (include/linux/stddef.h) ...
- 547. Friend Circles 求间接朋友形成的朋友圈数量
[抄题]: There are N students in a class. Some of them are friends, while some are not. Their friendshi ...
- trinitycore 魔兽服务器源码分析(一) 网络
trinitycore是游戏服务器的开源代码 许多玩家使用魔兽的数据来进行测试 ,使用它来假设魔兽私服. 官方网址 https://www.trinitycore.org/ 类似的还有mangos ...
- SpringBoot2.x配置JsonRedisSerializer
@Configurationpublic class SpringCacheRedisConfig { @Bean public RedisCacheManager cacheManager(Redi ...
- linux_文件夹实现挂载(必须在同一网段)
将外部想要挂载传输的目录开启共享文件夹 首先进行安装 yum install nfs-utils rpcbind yum install nfs* 建立想要挂载的目录 查看可以执行挂载的目录有哪些 s ...
- noip第16课资料
- 长方体类Java编程题
1. 编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...
- 花了一晚上时间,终于把Python的基本用法归纳好了!
一.内置函数 1. complex([real[,imag]]) 返回一个复数,实部 + 虚部*1j,或者把字符串或者数字转成复数形式. 参数可以是复数表达式,也可以是字符串.当参数是字符串的时候,数 ...
- KNN算法简介
KNN算法 K-近邻算法原理 K最近邻(kNN,k-NearestNeighbor)分类算法,见名思意. 我们的目的是要预测某个学生在数学课上的成绩... 先来说明几个基本概念:图中每个点代表一个样本 ...