python判断是否为空_python 判断对象是否为空

python判断是否为空_python 判断对象是否为空在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:ifaisNone:dosomething.else:dotheotherthing.python学习网,大量的免费python视频教程,欢迎在线学习!这样写看起来不错,但实际上会有问题。一般来讲,Python中会把下面几种情况当做空值来处理:NoneFalse0,0.0,0L”,(),[],{}其中Non…

大家好,又见面了,我是你们的朋友全栈君。

python判断是否为空_python 判断对象是否为空

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

do something.

else:

do the other thing.

python学习网,大量的免费python视频教程,欢迎在线学习!

这样写看起来不错,但实际上会有问题。一般来讲,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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131245.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JMM详解_jmm是啥

    JMM详解_jmm是啥如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题,netty,springboot,springcloud等系列文章,一系列干货随时送达,超神之路从此展开,BTAJ不再是梦想!概念​ Java内存模型(JavaMemoryModel,JMM)JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(MainMemory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Worki

    2025年9月12日
    4
  • integer转string java_Integer转换为String类型[通俗易懂]

    integer转string java_Integer转换为String类型[通俗易懂]在学习泛型时,遇到了一个小问题:Integeri=2;Strings=(String)i;Integer类型转换为String类型,本来想直接用强制转换,结果报错:Exceptioninthread”main”java.lang.ClassCastException:java.lang.Integercannotbecasttojava.lang.String经过…

    2025年8月4日
    2
  • 几种ARM编译器及IDE开发环境[通俗易懂]

    几种ARM编译器及IDE开发环境[通俗易懂]ARM应用软件的开发工具根据功能的不同,分别有编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等,目前世界上约有四十多家公司提供以上不同类别的产品。  用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库的集成开发环境(IDE…

    2022年6月1日
    168
  • 火狐浏览器显示“已阻止载入混合活动内容“的解决方法

    火狐浏览器显示“已阻止载入混合活动内容“的解决方法

    2021年11月4日
    96
  • py爬取图片_Python爬取图片

    py爬取图片_Python爬取图片疲惫的生活里总要有些温柔梦想吧目标URL:http://www.win4000.com/meinvtag4_1.html爬取美桌网某个标签下的美女壁纸,点进详情页可以发现,里面是一组套图一…

    2025年11月16日
    3
  • 自定义progressbar样式_样式

    自定义progressbar样式_样式android ProgressBar 样式讲解

    2022年4月21日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号