本文中所有代码均运行在Python 2.7上

在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:

if a is None:

do something.

else:

do the other thing.

这样写看起来不错,但实际上会有问题。一般来讲,Python中会把下面几种情况当做空值来处理:

None

False

0,0.0,0L

'',(),[],{}

其中None的特殊之处在于,它既不是数值0,也不是某个数据结构的空值,它本身就是一个空值对象。它的类型是NoneType,它遵循单例模式,也就是说,在同一命名空间下的所有None其实质上都是同一个空值对象。

>>> id(None)

1795884240

>>> None == 0

False

>>> None == ''

False

>>> a = None

>>> id(a)

1795884240

>>> a == None

True

上面的判断显然不符合我们的期望:只有当a被显示赋值为None的情况下,a==None才为True。

那么,对于Python中更为广义的None值判断,我们应该怎么做呢?

>>> a = '' #这里仅以空字符串为例,其他空值同样适用

>>> if a:

... print 'a is not empty'

... else:

... print 'a is a empty string'

'a is a empty string.'

可以看出,if a的判断方式得出了我们想要的结果,那么if a的判断方式究竟是一个怎样的过程呢?

if a会首先去调用a的__nonzero__()去判断a是否为空,并返回True/False,若一个对象没有定义__nonzero__(),就去调用它的__len__()来进行判断(这里返回值为0代表空),若某一对象没有定义以上两种方法,则if a的结果永远为True

接下来验证一下上面的说法:

>>>class A(object):

... def __nonzero__(self):

... print 'running on the __nonzero__'

... return True

>>>class B(object):

... def __len__(self):

... print 'running on the __len__'

... return False

>>> a, b = A(), B()

>>>if a:

... print 'Yep'

... else:

... print 'Nop'

running on the __nonzero__

Yep

>>>if b:

... print 'Yep'

... else:

... print 'Nop'

running on the __len__

Nop

python空值赋0_Python中的空值判断相关推荐

  1. python 空值_数据库中的空值与NULL的区别以及python中的NaN和None

    展开全部 数据库里面的"32313133353236313431303231363533e59b9ee7ad9431333363393632空值"有两种:空字符("&qu ...

  2. 【Python】过滤数组中的空值(空字符串''和None)

    使用场景 计算最大值或最小值时使用. 如果不进行空值过滤的话,python自带的min()函数会将空值作为最小值. 过滤数组中的空值:示例 def get_real_arr(arr):"&q ...

  3. Python的return语句中使用条件判断

    if end1 <= val <= end2 or end2 <= val <= end1:return True else:return False 等于 return en ...

  4. c# mysql datetime 判断为空 dbnull_转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的...

    SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00 :00,C# ...

  5. c# mysql datetime 判断为空 dbnull_转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究...

    SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00 :00,C# ...

  6. python处理csv文件里的空值_如何处理csv中的空值

    展开全部 数据库里面的"空2113值"有两种:空字符(""5261).空值(NULL). 两种存储方式在4102数据库中1653都很常见,实际中根据业务或者个人 ...

  7. Python处理数据中的空值(缺失值)时用到的dropna()函数和fillna()函数总结,通过示例弄懂这两个函数的用法。

    引言:在用python处理数据时,我们通常会遇到数据不完整的情况,比如有空值的时候,我们想要删除控制所在的行或列,或者是我们给空值设置为某一个值.这时候就可以用dropna和fillna两个函数来实现 ...

  8. python 列表表达式 if_python中if else如何判断表达式成立?

    我们都知道,if是判断语句.那么在电脑程序中,我们就要输入自己想要的条件,然后得出一个结论.顺便要说的是if后面跟的条件没有限制,所以小伙伴们在使用的时候不用怕出错啦.那么,小编今天来讲讲python ...

  9. 解决asp.net(C#)中 DataTime 空值 null为0001-01-01

    SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00,C#中 ...

最新文章

  1. 谷歌医疗AI再遭重挫!自宫头牌App,副总裁也已离职
  2. 事件响应政策制定常见雷区,都踩了我就只能祝福你了……
  3. C语言复习:内存模型2
  4. Dreamweaver的HTML语言标记,Dreamweaver
  5. 记录node内存瓶颈分析
  6. Python之函数的参数
  7. Hbuilder开发app实战-识岁06-face++的js实现【完结】
  8. Visual Studio 2012 Update 4 RC 启动调试失败解决方案
  9. python加载模型_解决python 无法加载downsample模型的问题
  10. python中set index_Python set_index和reset_index详解
  11. Java面向对象之成员变量的初始值、object类与对象
  12. QT最常用的字符串操作
  13. CSS 控制滚动条样式
  14. Linux学习----文件的使者-Rsync(马哥教育原创)
  15. html5回到顶部代码,返回顶部完整代码
  16. wps出现安装installer_我安装WPS2002时显示,该计算机缺少installscript引擎,请运行i
  17. 2021-08-01 武大账号访问知网
  18. android wear 制作时钟界面,android wear开发之绘制表盘.doc
  19. 用Python做的整蛊小程序——整点阴间的东西
  20. 用Python和OpenCV实现照片马赛克拼图(蒙太奇照片)

热门文章

  1. wxWidgets:exec 示例演示 wxExecute 和相关函数
  2. wxWidgets:wxPen类用法
  3. boost::metaparse::v1::impl::empty_string相关用法的测试程序
  4. boost::isomorphism用法的测试程序
  5. GDCM:gdcm::Series的测试程序
  6. Boost:自定义小矢量的测试程序
  7. boost::callable_traits的qualified_class_of_t的测试程序
  8. ITK:重视Valued图像的区域最小值
  9. ITK:高斯的一阶导数进行卷积来计算图像的梯度
  10. DCMTK:Telnet发起程序(ti)主程序