Python内置类型(1)——真值测试
2017-10-10 14:13
232 查看
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 内建类型 - 真值测试
- Python内建类型——真值测试
- python的组合数据类型及其内置方法说明
- 深入学习Python内置数据类型之——字典(Dictionary)
- Python 研究(Dive Into Python)笔记2--第3章 内置数据类型
- (3) Python 内置类型 –- 元组
- python-24-如何派生类内置不可变类型并修改其实例化行为?如何为创建大量实例节省内存?
- Python内置类型——set
- 测试架构师之路—python基于大数据类型的持续化测试设计
- python_如何派生内置不可变类型并修改实例化行为
- 今天开始学python(内置数据类型)
- python内置数据类型
- Python中内置数据类型list,tuple,dict,set的区别和用法
- python第三方扩展库及不同类型的测试需安装相对应的第三方库总结
- python 内置数据类型
- Python-内置数据类型
- Python3中内置类型bytes和str用法及byte和string之间各种编码转换
- Python基础--常用数据类型(常用内置对象)
- Python内置数据类型
- python的内置数据类型