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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Django的分页器实例(paginator)
Dec 01 Python
详解python里的命名规范
Jul 16 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
Python 获取div标签中的文字实例
Dec 20 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 Python
opencv实现图像平移效果
Mar 24 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动态创建Web站点的方法
2011/08/14 PHP
php存储过程调用实例代码
2013/02/03 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
php文件操作相关类实例
2015/06/18 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
python中logging包的使用总结
2018/02/28 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
毕业生求职信范文
2014/06/29 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers