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中super关键字用法实例分析
May 28 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
详解Numpy中的广播原则/机制
Sep 20 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
Python List cmp()知识点总结
Feb 18 Python
python3 深浅copy对比详解
Aug 12 Python
python实现超级马里奥
Mar 18 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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 如何向 MySQL 发送数据
2006/10/09 PHP
php SQL防注入代码集合
2008/04/25 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php头像上传预览实例代码
2017/05/02 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
详解Django配置优化方法
2019/11/18 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
500行python代码实现飞机大战
2020/04/24 Python
使用Python构造hive insert语句说明
2020/06/06 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
服务生自我鉴定
2014/01/22 职场文书
少先队入队活动方案
2014/02/08 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
文秘自荐信
2014/06/28 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
投标售后服务承诺书
2015/04/29 职场文书