前言

在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

发现问题

最近在给小伙伴写段小代码用于爬取一个GIS的各高层数据,python中使用了”is”来代替”==”,结果下载至512的时候出了问题。

代码如下

def get_next(x, y, z):

z += 1

if z is 2**x: # 应该用if z == 2**x

y += 1

z = 0

if y is 2**(x+1):

x += 1

y = 0

return x, y, z

这是用来获取下一个高层数据的URL的函数,结果第二天,小伙伴告诉我说下载到x == 9, y == 0, z == 512的时候停止下载了。

探索

首先,根据上述代码可以知道,z按照逻辑是不可能等于512的,所有开始怀疑是不是这个函数有问题,但是这么简单的函数,怎么看都不应该有问题啊。于是开始跟代码,发现

if z is 2**x

处,x == 9, y == 0, z == 512时,if后面居然返回的是False。我拿计算器算了好几遍,确定自己不是在二次元后,开始怀疑is的问题。

结果

在StackOverflow上面找到了答案

Is there a difference between == and is in Python?

is will return True if two variables point to the same object, == if the objects referred to by the variables are equal.

>>> a = [1, 2, 3]

>>> b = a

>>> b is a

True

>>> b == a

True

>>> b = a[:]

>>> b is a

False

>>> b == a

True

In your case, the second test only works because Python caches small integer objects, which is an implementation detail. For larger integers, this does not work:

>>> 1000 is 10**3

False

>>> 1000 == 10**3

True

然后自己写了个小段子看看最大的可复用的int是多大

a = 0

b = 0

while a is b:

a += 1

b += 1

最后发现最大是256。

小结:

==比较操作符:用来比较两个对象是否相等,value做为判断因素;

is同一性运算符:比较判断两个对象是否相同,id做为判断因素。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

python中等于号可以用is代替_python中is与双等于号“==”的区别示例详解相关推荐

  1. 在python中等号前面与后面分别是什么意思-python中is与双等于号“==”的区别示例详解...

    前言 在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识).python type()(数据类型)和value(值).is和==都是对对象进行比较判断作用的,但对对 ...

  2. python中一个等于号和两个等于号_python中is与双等于号“==”的区别示例详解

    前言 在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识).python type()(数据类型)和value(值).is和==都是对对象进行比较判断作用的,但对对 ...

  3. python中单行注释采用的符号是什么_Python注释符号使用说明(多行注释和单行注释),用法,详解,攻略...

    Python 语言允许在任何地方插入空字符或注释,但不能插入到标识符和字符串中间. Python 源代码的注释有两种形式,分别是单行注释和多行注释: -单行注释-------------------- ...

  4. python类中的属性分为类属性和实例属性两种_python中类和实例如何绑定属性与方法示例详解...

    前言 python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言, ...

  5. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. python中3or5什么意思_示例详解Python3 or Python2 两者之间的差异

    每门编程语言在发布更新之后,主要版本之间都会发生很大的变化. 在本文中,Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异,以帮助说明语言的变化. 本 ...

  7. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  8. python实例化是什么意思_Python中实例化class的执行顺序示例详解

    前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...

  9. python bisect_Python中bisect的用法及示例详解

    bisect是python内置模块,用于有序序列的插入和查找. 查找: bisect(array, item) 插入: insort(array,item) 查找 import bisect a = ...

最新文章

  1. Java程序中Timer的用法
  2. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 Excel Services中新功能...
  3. (十)如何查找端口被那个程序占用
  4. 汇顶科技2021秋招笔试
  5. Qt:Windows编程—Qt实现进程管理
  6. 在asp.net中使用线程
  7. 私人服务器能不能微信授权,微信授权流程
  8. 计算机辅助正畸学模型分析,计算机辅助口腔正畸算法研究
  9. php怎么自己写框架,PHP学习笔记,自己动手写个MVC的框架
  10. fenby C语言 P11
  11. python深度学习 共享 弗朗索瓦•肖莱(François Chollet)
  12. 二十七、商城 - 搜索解决方案-Solr(15)【1】
  13. 网页游戏对java的技术要求_网页制作谈谈什么技术是Java开发网页游戏的必要条件呢?怎样在微信公众平台上制作5级游戏?...
  14. uniapp启动微信小程序报错---initialize
  15. VideoReader Failed to init Ubuntu 18.04
  16. 一只喵的西行记-10 哲学家H+计划
  17. VS2012及帮助(MSDN离线版)文档官网下载
  18. 《未来已来- 马云》笔记
  19. 诠释的伤感独特个性日志发布:你是今生最让我伤心的人
  20. 柠萌影视终止A股上市计划:黄磊、张嘉译均持股,有股东多次失信

热门文章

  1. 阿里云华北区挂了。。。
  2. 成功解决AttributeError: ‘JointGrid‘ object has no attribute ‘annotate‘
  3. Python之pypmml:pypmml的简介、安装、使用方法之详细攻略
  4. DL之DNN优化技术:DNN中抑制过拟合/欠拟合、提高泛化能力技术的简介、使用方法、案例应用详细攻略
  5. 成功解决lib\subprocess.py, line 997, in _execute_child startupinfo) FileNotFoundError: [WinError 2]
  6. 成功解决TypeError: __init__() got an unexpected keyword argument 'serialized_options'
  7. Hadoop-2.7.4 八节点分布式集群安装
  8. JAVA_OA(五):SpringMVC接受传入页面的参数值
  9. Pycharm下载tensorflow问题
  10. BootStrap Table - JS事件绑定