python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍


Posted in Python onSeptember 21, 2016

代码中经常会有变量是否为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, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

================================================================
不过这并不适用于变量是函数的情况,以下转载自:https://github.com/wklken/stackoverflow-py-top-qa/blob/master/contents/qa-control-flow.md

foo is None 和 foo == None的区别

问题 链接

if foo is None: pass
if foo == None: pass

如果比较相同的对象实例,is总是返回True 而 == 最终取决于 "eq()"

>>> class foo(object):
  def __eq__(self, other):
    return True

>>> f = foo()
>>> f == None
True
>>> f is None
False

>>> list1 = [1, 2, 3]
>>> list2 = [1, 2, 3]
>>> list1==list2
True
>>> list1 is list2
False

另外

(ob1 is ob2) 等价于 (id(ob1) == id(ob2))

################################################################################
补充,2013.10.09
转自http://zhidao.baidu.com/question/514056244.html

python中的not具体表示是什么,举个例子说一下,衷心的感谢

在python中not是逻辑判断词,用于布尔型True和False,not True为False,not False为True,以下是几个常用的not的用法:
(1) not与逻辑判断句if连用,代表not后面的表达式为False的时候,执行冒号后面的语句。比如:
a = False
if not a: (这里因为a是False,所以not a就是True)
print "hello"
这里就能够输出结果hello
(2) 判断元素是否在列表或者字典中,if a not in b,a是元素,b是列表或字典,这句话的意思是如果a不在列表b中,那么就执行冒号后面的语句,比如:
a = 5
b = [1, 2, 3]
if a not in b:
print "hello"
这里也能够输出结果hello

not x 意思相当于 if x is false, then True, else False

Python 相关文章推荐
Python判断操作系统类型代码分享
Nov 22 Python
python常规方法实现数组的全排列
Mar 17 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python正则表达式使用经典实例
Jun 21 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
Python编写打字训练小程序
Sep 26 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
python if not in 多条件判断代码
Sep 21 #Python
python中range()与xrange()用法分析
Sep 21 #Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 #Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 #Python
浅析Python中MySQLdb的事务处理功能
Sep 21 #Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 #Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 #Python
You might like
php流量统计功能的实现代码
2012/09/29 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
javascript的BOM
2016/05/03 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python中subprocess批量执行linux命令
2018/04/27 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python pygame实现球球大作战
2019/11/25 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
python 日志 logging模块详细解析
2020/03/31 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
经贸韩语专业大学生职业规划
2014/02/14 职场文书
兽医医药专业求职信
2014/07/27 职场文书
初三英语教学计划
2015/01/23 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL