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 yield 小结和实例
Apr 25 Python
跟老齐学Python之使用Python查询更新数据库
Nov 25 Python
Python魔术方法详解
Feb 14 Python
python字典的常用操作方法小结
May 16 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
python实现倒计时小工具
Jul 29 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
Python 定义只读属性的实现方式
Mar 05 Python
Django 构建模板form表单的两种方法
Jun 14 Python
浅析Python模块之间的相互引用问题
Feb 26 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
机电专业毕业生求职信
2013/10/27 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
药品营销策划方案
2014/06/15 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
幼儿园教师求职信
2015/03/20 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python