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中使用smtplib和email模块发送邮件实例
Apr 22 Python
实例讲解Python中的私有属性
Aug 21 Python
python 排序算法总结及实例详解
Sep 28 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
教你学会使用Python正则表达式
Sep 07 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
python+rsync精确同步指定格式文件
Aug 29 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
python全面解析接口返回数据
Feb 12 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
深入浅出php socket编程
2015/05/13 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
pandas object格式转float64格式的方法
2018/04/10 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
PyCharm代码格式调整方法
2018/05/23 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python 阶乘累加和的实例
2019/02/01 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
python range实例用法分享
2020/02/06 Python
python中if及if-else如何使用
2020/06/02 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
上海期货面试题
2014/01/31 面试题
邹越感恩父母演讲稿
2014/08/28 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
公司联欢会主持词
2015/07/04 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫