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多线程(python多线程简明教程)
Jun 09 Python
让python在hadoop上跑起来
Jan 27 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python基于FTP模块实现ftp文件上传操作示例
Apr 23 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
python取余运算符知识点详解
Jun 27 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python flask几分钟实现web服务的例子
Jul 26 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
Flask缓存静态文件的具体方法
Aug 02 Python
Django vue前后端分离整合过程解析
Nov 20 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
遭遇php的in_array低性能问题
2013/09/17 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
react的hooks的用法详解
2020/10/12 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
从零学Python之入门(三)序列
2014/05/25 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
简介Django中内置的一些中间件
2015/07/24 Python
Python使用sorted排序的方法小结
2017/07/28 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python文件路径名的操作方法
2019/10/30 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
幼儿园开学寄语
2014/04/03 职场文书
冰峪沟导游词
2015/02/09 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL