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的一些用法分享
Oct 07 Python
python使用socket连接远程服务器的方法
Apr 29 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
Python解析、提取url关键字的实例详解
Dec 17 Python
Python3标准库总结
Feb 19 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
python游戏开发Pygame框架
Apr 22 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
农行实习自我鉴定
2013/09/22 职场文书
老公爱的承诺书
2014/03/31 职场文书
课例研修方案
2014/05/31 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
大学生操行评语大全
2014/12/31 职场文书
骨干教师个人总结
2015/02/11 职场文书
个人政治思想总结
2015/03/05 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
python四种出行路线规划的实现
2021/06/23 Python
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python