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简单实现获取当前时间
Aug 27 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
python 全文检索引擎详解
Apr 25 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
python实现ID3决策树算法
Dec 20 Python
Python之列表的插入&替换修改方法
Jun 28 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
python3读取autocad图形文件.py实例
Jun 05 Python
python设置中文界面实例方法
Oct 27 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
javascript 面向对象实战思想分享
2017/09/07 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Python字符串处理实现单词反转
2017/06/14 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python palywright库基本使用
2021/01/21 Python
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
统计系教授推荐信
2014/02/28 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
升学宴家长致辞
2015/07/27 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏