pythonifnotnone_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 (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的使用和区别相关推荐
- 汇编中的扫描码、ASCII码(也称字符码)、扩展码、虚拟键码 的区别
扫描码 是键盘对应按键的编码 ,虚拟键码 是操作系统对 "对应按键"的编码, 键盘ASCII码 ,是操作系统对"对应 虚拟键码"的编码(也称ASCII字符码或者 ...
- JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系...
一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...
- 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 ...
- sql 在某表中加入一列count所有数据_执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?...
击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货. 1. count(1) and count(*) 从执行计划来看,count(1)和 ...
- python中递归函数的基例_详谈Python基础之内置函数和递归 Python递归和循环的区别...
Python 递归函数基例 2. 关于递归函数基例的说明,以下选项中错误的是 A 递归函数的基例决定所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解. 例如:斐波那契数列递归,f(n) ...
- 20、CSS中单位:【px和%】【em和rem】【vw|vh|vmin|vmax】的区别
CSS中的px 和 % px (pixels) 是固定单位,也可以叫基本单位,代表像素,可以确保元素的大小不受屏幕分辨率的影响. % (percentage) 是相对单位,代表元素大小相对于其父元素或 ...
- 在Linux中,_exit()、exit(0)、exit(1)、和return的区别!!
功能: _exit() :退出程序: exit(0):运行正常退出程序: exit(1):运行异常退出程序: return():返回函数,若在主函数中,则会退出函数并返回值. _exit() 和 ex ...
- 计算机中ram和rom的区别是什么意思,Rom容量是什么意思?和Ram容量有什么区别?...
2013-02-11 12:18:41 Rom容量是什么意思?和Ram容量有什么区别? 标签:ROM是什么意思,RAM是什么意思,rom和ram的区别 一般大家在买手机的时候,在手机配置上都会出现&q ...
- 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 ...
最新文章
- 为什么linux的TTY登录程序getty/agetty一般都会设置一个-L的option?
- 减少if else的使用
- 2015蓝桥杯省赛---java---A---9(垒筛子)
- Docker (1) 基本概念和安装
- 软考网络管理员学习笔记1之第一章计算机硬件基础
- 关于eclipse环境启动不成功的问题解决方法
- 洛谷 CSP2019-J2 自测 P5661 公交换乘
- 关于GDAL180中文路径不能打开的问题分析与解决
- Uva 11054 - Wine trading in Gergovia(模拟)
- day6:vcp考试
- Qt 实现Windows系统Win10 c++音量调节
- 传奇服务器修改npc外观,传奇NPC里面图片修改方法
- 腾讯2019广告算法大赛总结
- SSM项目使用ConfigTools对数据库的密码进行加密
- 啊,原来申请数字证书这么简单
- Python之OpenGL笔记(30):飘扬的旗帜
- 如何利用Python教你如何爬取高德地图!非常全面啊!
- C语言实验——用*号输出字母C的图案
- 谷歌账户在别的网上登过_如何在Google帐户之间转移联系人
- (二)理解word2vec:实践篇
热门文章
- 适合海报设计的最佳字体
- 超时尚的UI电子商务PSD分层模板,临摹学习必备
- 电商无线页面设计手机移动端的设计模板
- Linux Jump Label(x86)
- Redis 多线程网络模型
- linux shell删除所有文件夹下指定扩展名(关键字)的所有文件
- Python库:time库
- linux乱码的文件怎么删除,如何删除Linux的乱码文件
- 在python中可以使用if作为变量名_变量,注释,缩进,细数Python优雅风 | Python基础连载(二)...
- 后勤管理系统_高校后勤设备报修管理系统_易报修系统高校后勤管理系统_免费高校后勤管理系统...