标签:fun null mkt yaf pop3 def lan wow psi
python中任何对象都能直接进行真假值的测试,用于if或者while语句的条件判断,也可以做为布尔逻辑运算符的操作数
这一点是和其它语言不一样的。比如C#,一个非bool的对象,如果要进行逻辑判断则必须先强制进行类型转换、或者调用对象的自身判断方法进行判断。
var message = " ";
if (message.IsNullOrEmpty()){
...
}
而python中可以直接对对象进行逻辑判断无需类型转换
message = " "
if message :
pass
布尔类型的值只有True和False,所以对象是不管什么类型,其真假值的测试结果必然是True和False中的一个。在python中真假值的测试结果可以通过调用内置函数bool来确认。
>>> bool(‘ ‘)
True
>>> bool(‘‘)
False
>>> bool(None)
False
>>> bool(False)
False
>>> bool(0),bool(0.0),bool(0j)
(False, False, False)
>>> bool(‘‘),bool(()),bool([])
(False, False, False)
>>> bool({})
False
内置对象除了以上值之外的都是真值>>> 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
欢迎关注公众号交流:
标签:fun null mkt yaf pop3 def lan wow psi
原文地址:http://www.cnblogs.com/sesshoumaru/p/python-truth-value-testing.html