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中的默认参数详解
Jun 24 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
基于python时间处理方法(详解)
Aug 14 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
解决pandas 作图无法显示中文的问题
May 24 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
python对接ihuyi实现短信验证码发送
May 10 Python
让文件路径提取变得更简单的Python Path库
May 27 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
header跳转和include包含问题详解
2012/09/08 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
简单的js分页脚本
2009/05/21 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
Python编程之Re模块下的函数介绍
2017/10/28 Python
Python语言描述最大连续子序列和
2017/12/05 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
Keras自定义IOU方式
2020/06/10 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
12月小学生校园广播稿
2014/02/04 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
课外科技活动总结
2014/08/27 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
借款民事起诉状范文
2015/05/19 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
培训后的感想
2015/08/07 职场文书
安全教育日主题班会
2015/08/13 职场文书
解决Python字典查找报Keyerror的问题
2021/05/26 Python
APP界面设计技巧和注意事项
2022/04/29 杂记
深入理解 Golang 的字符串
2022/05/04 Golang
win sever 2022如何占用操作主机角色
2022/06/25 Servers