if xif x is not None

if not xif x is None

以上两行的式子都不是等价的!!!

当把None赋予一个变量x时,x也许被赋值了,也许未被赋值! 接下来测试x是否被赋值成功。

当使用 if x is None的时候,操作符是is,用来检查x的id。None在python里是单例,当使用if x的时候,不同类型是有一些不同的。
如果期望值是一个boolean类型,而此时假设x不是一个boolean类型,则此时python会自动地调用__nonzero__方法。例如,if x事实上是这样被执行的,if x.__nonzero__或者(bool(x))。 __nonzero__是一个被命名得很反人类的名字,在python3中叫做__bool__它用来检测一个类的boolean值。
最奇葩最奇葩最让人困惑的地方来了!注意!bool(None)返回的是False,所以,如果xNone,那么if x返回的也是False,读到这里,你会这样觉得,“没什么不对啊,这样正好符合我的目的啊,我就是用来判断x是否为空值啊!如果x不是空,则返回True,是空则返回False” 。如果你有这样想,那你就很有必要继续往下读了。

-----------------解释如下---------------------------

python里面的其他值也被检测为False。最常见的例子就是空列表bool([])也返回False。但是,空列表有一个隐含的意思,它不等于None!!None意味着没有值,而空列表意味着零个值,这在语义上是不同的!有些人弄混淆就是这里没弄清楚。

---------------------------------------------

让我们来测试一下 x=None的情况


可以看到,这里什么都没输出
此时的bool(x)是什么呢?

跟我们想要的一样,是False

接下来测试一下空列表


可以看到这里只输出了下面的一条语句,这里就像我们上面说的,空列表不等于None
哎?那为什么上面那条语句不输出呢?
我们上面说到,python会自动给非boolean类型进行bool判断的时候转换成boolean类型。
我们来看看是不是这样~

这就解释了上面那条语句为什么没输出了吧
如果我们的列表是有值的,比如x=[1],我们来看看bool(x)的结果吧。

怎么样?这下清楚多了吧。

接下来看看常数值


这个就清楚多了,没列表那么绕

接下来再看最后一个,自定义类

看了简单的常数值,来看看一个比较不容易的。类。

可以看到,x是被__bool__初始化的。
它的bool值是什么呢?

看!那句话被打印了,说明它跑去里面执行了东西!

还是很糊涂?我们来改一下def __bool__(self):的返回值,尝试一下返回False。

看,因为返回了False,所以上面那句话就不打印了,下面那句依旧打印。

好了,看到这里,希望你们已经懂了,很高兴能帮助到大家,如果有什么不明白的,可以在评论区留言,我们一起来讨论。

if x 和 if x is not None的区别(python)相关推荐

  1. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  2. locust入门:单机使用locust运行压力测试

    locust的官方文档在这里: http://docs.locust.io/en/stable/ 前置:locust的测试脚本使用为python(若未安装python环境,可以搜索安装python) ...

  3. 使用Maven打包生成的-SNAPSHOT.jar与-RELEASE.jar分别代表什么?SNAPSHOT是什么意思?RELEASE是什么意思?

    使用Maven打包后生成 XXXXXXX-1.0.0-SNAPSHOT.jar 和 XXXXXXX-1.0.0-RELEASE.jar 的区别???? 首先,根本原因:这是因为你的pom.xml中的项 ...

  4. docker镜像的备份和恢复

    在使用docker的时候总会出现这种情况:下载东西很慢很慢,下载完配置完以后,突然,一个地方配置出现了问题,无法恢复,需要重新装载,那么,之前的所有配置.安装.下载都没了,又是一个大活~ 该怎么办呢? ...

  5. UUID的使用及其原理

    今天敲项目要用UUID,想起之前老师告诉UUID的使用,但没说具体的生成逻辑,于是我进行了百度 首先,UUID的使用: //生成随机的UUID String uuid = UUID.randomUUI ...

  6. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

  7. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  8. 中级实训第一天的自学报告

    目录[阅读时间:约10分钟] 中级实训第一天的自学报告 姓名:隐藏敏感信息 学号:隐藏敏感信息 一.Vi/Vim 二.Java 三.Ant 四.Junit [附加]五.SonarQube [附加]六. ...

  9. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  10. 【Datawhale-Python】Task1

    1.环境搭建 略(见之前博客) 2.python初体验 ①print() 略 ②input() Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型. > ...

最新文章

  1. 机器人教练SWOT分析_学车没人教,包头这个驾校机器人教练已上岗,再也不怕被教练骂了...
  2. c# mysql app.config_60. C# -- 读取 appconfig文件配置数据库连接的方法
  3. c bitset get_Java BitSet get()方法与示例
  4. Unity 协程深入解析与原理
  5. Route Class
  6. 输入一批整数,输出最大最小值,输入0结束
  7. Python图像处理库:Pillow 初级教程
  8. 做一个消息自动回复,但是回复内容可以在网页上面输入,用input接收,错了,别人有新增选项,本身就是在页面进行新增,页面维护...
  9. 南极沉船_世界上一些神秘的沉船,都成了仿佛被世界遗弃的盛景
  10. 数字水印技术的基本概念和现状
  11. [网站设计] 素材网罗
  12. resnet152训练_ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
  13. 5990.8亿,一个如约而来的重大项目
  14. CSS:transform应用之立体魔方案例
  15. 七里香计算机音乐谱子,七里香(改编自《新经典》)
  16. 2个大厂 100亿级 超大流量 红包 架构方案
  17. 基于任务点的加速仿真
  18. vin端口是什么意思_「每日一题」什么是 Web 服务器(server)
  19. 开启codelite的c++11
  20. Movicon/Connext设备连接实例(一)——Movicon.NExT与Codesys通讯

热门文章

  1. mysql 更改建表语句_MySql:如何通过Sql语句创建表,更改表?,这几步你要了解...
  2. 记录用bazel编译tensorflow源码
  3. 机器视觉系统图像采集卡功能解析
  4. Memcached查找命令
  5. 傻子都能看懂的 —— 详解欧拉公式推导
  6. VUE2.0 饿了么学习笔记(10)加减号组件cartcontrol
  7. Beyond One-Model-Fits-All: A Survey of Domain Specialization for Large Language Models
  8. Bitmap image and image mask
  9. CBA向B站索赔4亿元,究竟为何?
  10. 公司流行加班,而且把加班的时间长短还月度排名,我昏!