代码中经常会有变量是否为None的判断,有三种主要的写法:

第一种是`if x is None`;

第二种是 `if not x:`;

第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`) 。

如果你觉得这样写没啥区别,那么你可就要小心了,这里面有一个坑。先来看一下代码:

>>> x = 1

>>> notx

False>>> x = [1]>>> notx

False>>> x =0>>> notx

True>>> x = [0] #You don't want to fall in this one.

>>> notx

False

在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False ,即:

因此在使用列表的时候,如果你想区分x==[]和x==None两种情况的话, 此时`if not x:`将会出现问题:

>>> x =[]>>> y =None>>>

>>> x isNone

False>>> y isNone

True>>>

>>>

>>> notx

True>>> noty

True>>>

>>>

>>> not x isNone>>>True>>> not y isNone

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://www.jb51.net/article/93165.htm

pythonifnotnone_python中if not x: 和 if x is not None: 和 if not x is None的使用和区别相关推荐

  1. 汇编中的扫描码、ASCII码(也称字符码)、扩展码、虚拟键码 的区别

    扫描码 是键盘对应按键的编码 ,虚拟键码 是操作系统对 "对应按键"的编码, 键盘ASCII码 ,是操作系统对"对应 虚拟键码"的编码(也称ASCII字符码或者 ...

  2. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系...

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  3. python中if not x: 和 if x is not None: 和 if not x is None的使用和区别

    代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是if x is None: 第二种是 if not x:: 第三种是if not x is None(这句这样理解更清晰if not ...

  4. sql 在某表中加入一列count所有数据_执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?...

    击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货. 1.  count(1) and count(*) 从执行计划来看,count(1)和 ...

  5. python中递归函数的基例_详谈Python基础之内置函数和递归 Python递归和循环的区别...

    Python 递归函数基例 2. 关于递归函数基例的说明,以下选项中错误的是 A 递归函数的基例决定所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解. 例如:斐波那契数列递归,f(n) ...

  6. 20、CSS中单位:【px和%】【em和rem】【vw|vh|vmin|vmax】的区别

    CSS中的px 和 % px (pixels) 是固定单位,也可以叫基本单位,代表像素,可以确保元素的大小不受屏幕分辨率的影响. % (percentage) 是相对单位,代表元素大小相对于其父元素或 ...

  7. 在Linux中,_exit()、exit(0)、exit(1)、和return的区别!!

    功能: _exit() :退出程序: exit(0):运行正常退出程序: exit(1):运行异常退出程序: return():返回函数,若在主函数中,则会退出函数并返回值. _exit() 和 ex ...

  8. 计算机中ram和rom的区别是什么意思,Rom容量是什么意思?和Ram容量有什么区别?...

    2013-02-11 12:18:41 Rom容量是什么意思?和Ram容量有什么区别? 标签:ROM是什么意思,RAM是什么意思,rom和ram的区别 一般大家在买手机的时候,在手机配置上都会出现&q ...

  9. python中if not x: 和 if x is not None: 和 if not x is None的使用和区别(这里面有一个坑)

    前言:代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是if x is None 第二种是 if not x: 第三种是if not x is None(这句这样理解更清晰if no ...

最新文章

  1. 为什么linux的TTY登录程序getty/agetty一般都会设置一个-L的option?
  2. 减少if else的使用
  3. 2015蓝桥杯省赛---java---A---9(垒筛子)
  4. Docker (1) 基本概念和安装
  5. 软考网络管理员学习笔记1之第一章计算机硬件基础
  6. 关于eclipse环境启动不成功的问题解决方法
  7. 洛谷 CSP2019-J2 自测 P5661 公交换乘
  8. 关于GDAL180中文路径不能打开的问题分析与解决
  9. Uva 11054 - Wine trading in Gergovia(模拟)
  10. day6:vcp考试
  11. Qt 实现Windows系统Win10 c++音量调节
  12. 传奇服务器修改npc外观,传奇NPC里面图片修改方法
  13. 腾讯2019广告算法大赛总结
  14. SSM项目使用ConfigTools对数据库的密码进行加密
  15. 啊,原来申请数字证书这么简单
  16. Python之OpenGL笔记(30):飘扬的旗帜
  17. 如何利用Python教你如何爬取高德地图!非常全面啊!
  18. C语言实验——用*号输出字母C的图案
  19. 谷歌账户在别的网上登过_如何在Google帐户之间转移联系人
  20. (二)理解word2vec:实践篇

热门文章

  1. 适合海报设计的最佳字体
  2. 超时尚的UI电子商务PSD分层模板,临摹学习必备
  3. 电商无线页面设计手机移动端的设计模板
  4. Linux Jump Label(x86)
  5. Redis 多线程网络模型
  6. linux shell删除所有文件夹下指定扩展名(关键字)的所有文件
  7. Python库:time库
  8. linux乱码的文件怎么删除,如何删除Linux的乱码文件
  9. 在python中可以使用if作为变量名_变量,注释,缩进,细数Python优雅风 | Python基础连载(二)...
  10. 后勤管理系统_高校后勤设备报修管理系统_易报修系统高校后勤管理系统_免费高校后勤管理系统...