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


Posted in Python onOctober 09, 2020

代码中经常会有变量是否为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使用socket远程连接错误处理方法
Apr 29 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python腾讯语音合成实现过程解析
Aug 01 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
Python多线程的退出控制实现
Aug 10 Python
Python爬取网页信息的示例
Sep 24 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
Python尾递归优化实现代码及原理详解
Oct 09 #Python
Python hashlib模块的使用示例
Oct 09 #Python
浅析Python requests 模块
Oct 09 #Python
Python特殊属性property原理及使用方法解析
Oct 09 #Python
python GUI计算器的实现
Oct 09 #Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 #Python
Python使用socket_TCP实现小文件下载功能
Oct 09 #Python
You might like
建立文件交换功能的脚本(三)
2006/10/09 PHP
五个PHP程序员工具
2008/05/26 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
简单谈谈原生js的math对象
2017/06/27 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Python内建数据结构详解
2016/02/03 Python
深入理解Django中内置的用户认证
2017/10/06 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
校园报刊亭的创业计划书
2014/01/02 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
2014年市场部工作总结
2014/11/25 职场文书
感谢信怎么写
2015/01/21 职场文书
关于分班的感言
2015/08/04 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android