等值、大小比较

在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较。关键词:内置类型、同类型。所以,两个对象如果类型不同,就没法比较,比如数值类型的数值不能和字符串类型的数值或字母比较。

对于python中的等值、不等值、大小比较的规则为何如此,以后学了Class的运算符重载,自然就会知道。

其实自定义的类型(python 3.x中类Class就是类型)也可以进行比较,只不过要对类的比较操作符进行运算符重载。这些以后再说,这里先看内置类型的比较。

比较操作符有:

==  !=  <  <=  >  >=

例如,下面的比较全部返回True。

bool(1 < 2)
bool('a' < 'c')
bool('A' < 'a') # 字符大小:A < Z < a < z bool([1,2,2] < [1,2,3])
bool((1,2,2) < (1,2,3))
bool({1,2,2} < {1,2,3})

python中同类型的内置类型对象(字典除外),都是从左开始,一个一个元素向后比较,就算中间遇到嵌套的容器结构(如list/tuple/Set),也会递归到嵌套的结构中去一个个比较。

>>> bool([1,2,[3,3]] < [1,2,[3,4]])
True

注意,None对象只能参与等值和不等值比较,不能参与大小比较。

>>> None == None
True
>>> None != None
False
>>> None <= None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<=' not supported between instances of 'NoneType' and 'NoneType'

python支持连续比较,连续比较时等价于使用and运算。例如:

a < b < c    等价于  a < b and b < c
a < b > c 等价于 a < b and b > c
a == b < c 等价于 a == b and b < c

一定要注意连续比较时的逻辑。例如1 == 2 < 3返回False,但它等价于1 == 2 and 2 < 3,而不是先评估1==2得到False,再将比较的结果与后面的做比较,即等价于False < 3,这意味着0<3,这实际上是返回True的。

>>> 1 == 2 < 3
False >>> (1==2) < 3
True

连续比较是一种比较语法,它不仅限于数值的连续比较,还支持其它类型。比如:

>>> "ac" > "ab" < "ad"
True

is 和 ==

有两种比较数据对象是否相等的方式:"=="和"is",它们的否定形式分别为"!="和"is not"。

它们都是比较表达式,但却是完全不同的比较方式:

  • "=="和"!="符号比较的是数据的值是否相等、相同
  • "is"比较的是两个数据对象在内存中是否是同一个数据对象。换句话说,比较的是内存地址

等号比较很容易理解,只要值相等就为True,否则为False。

is比较的是内存中的数据对象。例如:

>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False

a和b在数值上是相等的,所以a == b返回True。但它们分别指向的内存中的数据对象1000,却不是同一个数据对象,所以a is b返回False。如下图,内存中有两个1000。

如果是下面这种情况:

>>> a = 1000
>>> b = a
>>> a is b
True

结果中a is b返回True,因为b = a是将a中保存的1000的地址赋值给b,使得b中也保存1000地地址。如下图,内存中只有一个1000,但是a和b都指向这个1000。

is测试还有些特殊情况,另外,关于b = a为什么赋值的是a中保存的地址,这里不对此展开描述,在后面的文章会非常详细地进行解释。当然,放在后面并不是因为难,而是文章内容安排的先后顺序,有需求可以先看看:

python等值和大小比较的更多相关文章

  1. 对python中等值和大小比较

    等值.大小比较 在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较.关键词:内置类型.同类型.所以,两个对象如果类型不同,就没法比较,比如数值类型的数值 ...

  2. python 修改图像大小和分辨率

    1 概念: 分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数.比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x108 ...

  3. 针对格式文件,Python读取一定大小的文件内容

    由数据库导出的数据是格式化数据,如下所示,每两个<REC>之间的数据是一个记录的所有字段数据,如<TITLE>.<ABSTRACT>.<SUBJECT_COD ...

  4. eclipse中python文本字体大小设置

    eclipse中python脚本用默认的字体和大小,注释是中文的也看不清楚,改一下字体吧 windows-preferences-python-editor-colors and fonts 其实上一 ...

  5. python实现目录大小计算(含子目录)

    path=r"F:\\PYTHON\\day8\\ftp_server\\"#这里我直接写了固定地址,你可以自己输入 file_size = 0 def split_doc(pat ...

  6. python 比较数字大小按从大到小输出

    主要用到的python 的知识点 1:   内置函数max 2:     列表的操作 3:   while 循环 4 :  错误处理 代码如下: #!/usr/bin/python #coding=u ...

  7. python字符串比较大小

    zfill函数 xs = ['] print (sorted(xs))

  8. 用python设计猜大小的游戏

    import random def roll_dice(numbers = 3,points = None): print("------摇骰子------") if points ...

  9. python比较大小

    1.python的比较总是检查复合对象的所有部分,直到可以得出结果为止. 2.会自动遍历嵌套的所有数据结构,有多深走多深,首次发现的差值将决定比较的结果 3.== :操作符测试值的相等性 4.is : ...

随机推荐

  1. Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据

    转自 : http://blog.csdn.net/nux_123/article/details/45037719 问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都 ...

  2. influence maximization 第二弹

    Robust Influence Maximization 首先简要介绍一下这个问题:在一个社交网络图中寻找固定数量的节点,使得这些节点对所有节点的影响值尽可能的大.先对这个问题给出形式化的定义:给一 ...

  3. Java变成思想--多线程

    Executor :线程池 CatchedThreadPool:创建与所需数量相同的线程,在回收旧线程是停止创建新县城. FixedThreadPool:创建一定数量的线程,所有任务公用这些线程. S ...

  4. Exp5MSF基础应用——20164325王晓蕊

    1.实验要求 一个主动攻击实践,ms08_067; 一个针对浏览器的攻击,MS11-003(唯一): 一个针对客户端的攻击,adobe_toolbutton: 成功应用任何一个辅助模块Ipidseq( ...

  5. VSCode插件开发全攻略(七)WebView

    更多文章请戳VSCode插件开发全攻略系列目录导航. 什么是Webview 大家都知道,整个VSCode编辑器就是一张大的网页,其实,我们还可以在Visual Studio Code中创建完全自定义的 ...

  6. 【病毒分析】对一个vbs脚本病毒的分析

    [病毒分析]对一个vbs脚本病毒的分析 本文来源:i春秋社区-分享你的技术,为安全加点温度 一.前言 病毒课老师丢给我们一份加密过的vbs脚本病毒的代码去尝试分析,这里把分析过程发出来,供大家参考,如 ...

  7. Day7:html和css

    Day7:html和css 如果有浮动,会导致脱标,定位也能脱标,我们没有清除浮动,因为里面有子绝父相. 清除浮动的方法 额外标签法,在最后一个浮动元素后面添加一个空的标签代码: <div st ...

  8. cookie和session的个人理解

    这是我学习后的个人理解  欢迎提点 如果说的不是很正确请纠正 COOKIE: 1.服务端给浏览器客户端返回一个编号(COOKIE值) 2.这个值存在浏览器中,接下来浏览器再次访问我的时候,会把这个值带 ...

  9. Python - 浅谈Python的编译与反编译

    1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...

  10. android自动化必备之界面元素

    包名&类名 packageName(包名) 应用的身份标识,系统通过包名识别不同的应用,如两个相同包名的应用在安装时候会覆盖 activityName(类名) Activity:android ...