Python判断变量是否是None写法代码实例

 更新时间:2020年10月09日 15:50:23   作者:lincappu  
这篇文章主要介绍了Python判断变量是否是None写法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码中经常会有变量是否为None的判断,有三种主要的写法:

  • 第一种是`if x is None`;
  • 第二种是 `if not x:`;
  • 第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`) 。

如果你觉得这样写没啥区别,那么你可就要小心了,这里面有一个坑。先来看一下代码:

>>> x = 1
>>> not x
False
>>> x = [1]
>>> not x
False
>>> x = 0
>>> not x
True
>>> x = [0]   # You don't want to fall in this one.
>>> not x
False

在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False ,即:

not None == not False == not '' == not 0 == not [] == not {} == not ()

因此在使用列表的时候,如果你想区分x==[]和x==None两种情况的话, 此时`if not x:`将会出现问题:

>>> x = []
>>> y = None
>>> 
>>> x is None
False
>>> y is None
True
>>> 
>>> 
>>> not x
True
>>> not y
True
>>> 
>>> 
>>> not x is None
>>> True
>>> not y is None
False
>>>

也许你是想判断x是否为None,但是却把`x==[]`的情况也判断进来了,此种情况下将无法区分。

对于习惯于使用if not x这种写法的pythoner,必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

而对于`if x is not None`和`if not x is None`写法,很明显前者更清晰,而后者有可能使读者误解为`if (not x) is None`,因此推荐前者,同时这也是谷歌推荐的风格

结论:

`if x is not None`是最好的写法,清晰,不会出现错误,以后坚持使用这种写法。

使用if not x这种写法的前提是:必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于Python实现视频去重小工具

    基于Python实现视频去重小工具

    这篇文章主要为大家详细介绍了如何通过Python语言编写简单的视频去重小工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起尝试一下
    2023-03-03
  • Python二维列表的创建、转换以及访问详解

    Python二维列表的创建、转换以及访问详解

    列表中的元素还可以是另一个列表,这种列表称为多为列表,只有一层嵌套的多维列表称为二维列表,下面这篇文章主要给大家介绍了关于Python二维列表的创建、转换及访问的相关资料,需要的朋友可以参考下
    2022-04-04
  • Python使用PyMuPDF操作PDF的代码示例

    Python使用PyMuPDF操作PDF的代码示例

    PyMuPDF,也被称为fitz(这是其导入时的常用别名),是一个功能强大的Python库,用于处理PDF和其他文档格式,与 PyPDF2相比,PyMuPDF提供了更多的功能和更好的性能,特别是在处理复杂的PDF文件时,本文给大家介绍了Python使用PyMuPDF操作PDF,需要的朋友可以参考下
    2025-02-02
  • 安装python及pycharm的教程图解

    安装python及pycharm的教程图解

    本文通过图文并茂的形式给大家介绍了安装python及pycharm的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • 深入了解python装饰器

    深入了解python装饰器

    这篇文章主要介绍了解python装饰器,装饰器定义一个为其他函数添加功能的函数,装饰器就是在不修改装饰对象源代码以及调用方式的前提下,为装饰对象添加新功能,下面和小编一起进入文章内容了解更多知识,需要的朋友可以参考一下
    2022-03-03
  • 浅谈matplotlib中FigureCanvasXAgg的用法

    浅谈matplotlib中FigureCanvasXAgg的用法

    这篇文章主要介绍了浅谈matplotlib中FigureCanvasXAgg的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python高光谱遥感影像处理问题详细分析讲解

    Python高光谱遥感影像处理问题详细分析讲解

    这篇文章主要介绍了Python高光谱遥感影像处理问题,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2023-01-01
  • Python操作Elasticsearch处理timeout超时

    Python操作Elasticsearch处理timeout超时

    这篇文章主要介绍了Python操作Elasticsearch处理timeout超时,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Python工具PDB调试器的使用方法详解

    Python工具PDB调试器的使用方法详解

    还记得你是如何进行代码调试的吗?有人会说,我是添加一些输出语句,有人说,我是使用IDE自带的设置断点功能,当然都没有错,只是看哪个更合适,更能提升效率,但这都不是我们今天讲的重点,今天的重点是Python中PDB调试器的使用方法,需要的朋友可以参考下
    2023-11-11
  • Python 4种实现定时任务的方案

    Python 4种实现定时任务的方案

    这篇文章主要给大家分享了Python 4种实现定时任务的方案,运用 while True: + sleep()、Timeloop 库、threading.Timer 、内置模块 sched ,下面就来看看具体的实现过程吧
    2021-12-12

最新评论