判断一个对象是否是空对象,判断对象是不是空对象

  判断一个对象是否是空对象,判断对象是不是空对象

  在实际工作中,我们不可避免地要处理空值。相信很多初学者都会写以下代码: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 除非另有规定

判断一个对象是否是空对象,判断对象是不是空对象