判断一个对象是否是空对象,判断对象是不是空对象
在实际工作中,我们不可避免地要处理空值。相信很多初学者都会写以下代码:ifaisNone:
做点什么。
否则:
做其他事。
Python学习网,大量免费python视频教程,欢迎在线学习!
这样写看起来不错,但实际上会出问题。一般来说,Python会将以下情况视为短值:无
错误的
0.0升
,(),[],{}
None的特别之处在于,它既不是数值0,也不是数据结构的空值,它本身就是一个空值对象。它的类型是NoneType,遵循单例模式,即同一个命名空间中的所有None本质上都是同一个空对象。id(无)
1795884240
无==0
错误的
None==
错误的
a=无
id(a)
1795884240
a==无
真实的
上面的判断显然不符合我们的预期:A==None只有当A被显示为赋值给None时才为真。
那么,对于Python中更广泛的无值判断,我们该怎么办呢?A=#这里只以空字符串为例,其他空值同样适用。
ifa:
.打印“aisnotempty”
.否则:
.打印“aisaemptystring”
“aisaemptystring”
由此可见,如果a的判断方法得到了想要的结果,那么a的判断方法是一个什么样的过程呢?
If会先调用A的__非零_ _()来判断A是否为空,并返回True/False。如果一个对象没有定义_ _非零_()的话,它会调用它的__len__()来确定(这里返回值0表示空)。如果一个对象没有定义上述两个方法,if a的结果将始终为True。
接下来,验证上面的语句:classA(object):
.def _ _非零__(self):
.打印“运行非零__”
.返回真
b类(对象):
.def__len__(self):
.打印“运行__len__”
.返回False
A,b=A(),B()
ifa:
.打印“是”
.否则:
.打印“Nop”
运行__非零_ _
是
ifb:
.打印“是”
.否则:
.打印“Nop”
运行_ _ len _ _
not otherwise provided 除非另有规定