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 13 Python
python和shell变量互相传递的几种方法
Nov 20 Python
python脚本实现分析dns日志并对受访域名排行
Sep 18 Python
python开发之for循环操作实例详解
Nov 12 Python
python判断输入日期为第几天的实例
Nov 13 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
numpy实现RNN原理实现
Mar 02 Python
学会Python数据可视化必须尝试这7个库
Jun 16 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判断浏览器、判断语言代码分享
2015/03/05 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
python中管道用法入门实例
2015/06/04 Python
python修改字典内key对应值的方法
2015/07/11 Python
Python守护线程用法实例
2017/06/23 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
简单了解python代码优化小技巧
2019/07/08 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
flask开启多线程的具体方法
2020/08/02 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
两年的个人工作自我评价
2014/01/10 职场文书
八一演出活动方案
2014/02/03 职场文书
如何写早恋检讨书
2014/09/10 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers