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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
改进Django中的表单的简单方法
Jul 17 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
Django添加feeds功能的示例
Aug 07 Python
python判断数字是否是超级素数幂
Sep 27 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 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
用文本作数据处理
2006/10/09 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
使用python编写监听端
2018/04/12 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
python requests使用socks5的例子
2019/07/25 Python
python类的实例化问题解决
2019/08/31 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
先进个人事迹材料
2014/01/25 职场文书
学生会离职感言
2014/02/11 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
银行委托书范本
2014/09/28 职场文书
节水宣传标语口号
2015/12/26 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python