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中操作文件之seek()方法的使用教程
May 24 Python
Python3安装Pymongo详细步骤
May 26 Python
python difflib模块示例讲解
Sep 13 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
Python tkinter label 更新方法
Oct 11 Python
Python如何实现强制数据类型转换
Nov 22 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
python实现同一局域网下传输图片
Mar 20 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
django rest framework使用django-filter用法
Jul 15 Python
python如何修改文件时间属性
Feb 05 Python
python函数的两种嵌套方法使用
Apr 02 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
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
js实现登录与注册界面
2017/11/01 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
vuex的简单使用教程
2018/02/02 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
Django实现图片文字同时提交的方法
2015/05/26 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
中国高端家电购物商城:顺电
2018/03/04 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
毕业自荐书
2013/12/09 职场文书
医生见习报告范文
2014/11/03 职场文书
MyBatis 动态SQL全面详解
2021/10/05 MySQL
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB