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程序中保存的所有数据都是围绕对象这个概念展开的 程序中存储的所有数据都是对象 每个对象都有一个身份.一个类型和一个值 ...
随机推荐
- echo不换行的实现
1. echo的参数中, -e表示开启转义, /c表示不换行: echo -e "please input a value:/c" 2. -n不换行: echo -n " ...
- TPL DataFlow初探(二)
上一篇简单的介绍了TDF提供的一些Block,通过对这些Block配置和组合,可以满足很多的数据处理的场景.这一篇将继续介绍与这些Block配置的相关类,和挖掘一些高级功能. 在一些Block的构造函 ...
- matlab中mat文件简单存/取
>>abc=[,,,,,]; >>save data save file_name:命令可以将当前项目中变量的值保存到file_name中去,这里的data文件就是mat文件. ...
- @RequestBody配合@JsonFormat注解实现字符串自动转换成Date
2018年08月28日 16:41:15 混合动力火锅 阅读数:440 在controller中使用@RequestBody可以自动将字符串转换成int或者将int转换成字符串,但是Date类型则 ...
- 洛谷1345 [USACO5.4]奶牛的电信Telecowmunication
原题链接 最小割点数转换成最小割边数的模板题(不过这数据好小). 每个点拆成两个点,连一条容量为\(1\)的边,原图的边容量定为\(+\infty\),然后跑最大流即可. 这里用的是\(Dinic\) ...
- 14. pt-kill
pt-kill h=192.168.100.101,P=3306,u=admin,p=admin \--match-user "user01" \--match-host &quo ...
- python_day8_socket
目录 客户端/服务器架构 socket逻辑结构 socket概念 套接字的概念 TCP与UDP套接字应用 recv与recvfrom的区别 粘包现象及处理 认证客户端的链接合法性 socktserve ...
- 【轻松前端之旅】CSS盒子模型
盒子模型,也叫框模型,在CSS里是很重要的概念. 每个元素都可以看做一个盒子.盒子包含四个部分:外边距(margin).边框(border).内边距(padding).元素内容(element con ...
- Linux连不上校园网怎么办?
原本,在我们学校我只要连上WiFi打开浏览器, 它就会自动重定向到校园网登录的界面.但是今天浏览器并没有自己打开登录页面,一直在加载.于是我想直接登录路由器,在地址栏输入192.168.0.1,结果它 ...
- 首先看一下友晶DE-SOC开发板的user manual
对于友晶DE-SOC系列开发板来说,由于其内部自带ARM 的cortex-A9硬核,所以使用nios II开发来说其实是不划算的,但是这里重点是为了学习NIOS II的开发,所以对于用DS-5来开发A ...