python有8种比较运算符:<<=>>===!=isis not,它们具有相同的优先级。它们具体的含义如下:

运算符 含义
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
!= 不等于
is 是否同一个对象
is not 是否不是同一个对象

比较运算符有如下一些特性:

相同类型间的2个不同对象都能进行比较


# 整形
>>> 2 > 1
True
>>> 2 >= 1
True
>>> 2 < 1
False
>>> 2 <= 1
False
>>> 2 == 1
False
>>> 2 != 1
True
>>> 2 is 1
False
>>> 2 is not 1
True # 字符串
>>> 'a' > 'b'
False
>>> 'a' >= 'b'
False
>>> 'a' < 'b'
True
>>> 'a' <= 'b'
True
>>> 'a' == 'b'
False
>>> 'a' != 'b'
True
>>> a is 'b'
False
>>> a is not 'b'
True # 序列类型
>>> (1,2) > (2,3)
False
>>> (1,2) >= (2,3)
False
>>> (1,2) < (2,3)
True
>>> (1,2) <= (2,3)
True
>>> (1,2) == (2,3)
False
>>> (1,2) != (2,3)
True
>>> (1,2) is (2,3)
False
>>> (1,2) is not (2,3)
True

大小比较运算符只能在类型相同的2个对象间比较,不同的类型进行比较会报语法错误

# 类型相同的对象间可以比较大小
>>> 1 >= 0
True
>>> 'a' < 'b'
True
>>> (1,2) > (1,1)
True # 类型不相同的对象间不可以比较大小
>>> 1 >= '1'
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
1 >= '1'
TypeError: unorderable types: int() > str()
>>> (1,2) <= [1,2]
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
(1,2) <= [1,2]
TypeError: unorderable types: tuple() >= list()

同是数值类型,整形类型对象和浮点型对象间可以比较大小,复数类型对象和整形或者浮点型对象不能比较大小

# 整形类型对象和浮点型对象间可以比较大小
>>> 2.1 > 2
True
>>> -1.1 < 0
True # 复数类型对象和整形或者浮点型对象不能比较大小
>>> 1 + 1j > 1
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
1 + 1j > 1
TypeError: unorderable types: complex() > int()

不同类型间的对象间可以进行相等==!=比较,结果均不相等

>>> 1 == "1"
False >>> 1 == (1)
False >>> 1 == [1]
False

整数类型和浮点数类型间的对象相等比较时,如果两个对象的数值相同,则结果相等

>>> 1 == 1.0
True

自定义类的2个实例对象都是不相等的,它们之间不能比较大小

>>> class Man():
def __init__(self,name):
self.name = name >>> a = Man('xiaoming')
>>> b = Man('xiaoming')
>>> a == b
False
>>> a != b
True
>>> a > b
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
a > b
TypeError: unorderable types: Man() > Man()

自定义类如果实现了__eq__()方法,则可进行相等比较,相等比较结果是__eq__()方法执行返回的结果;不等比较的结果则优先看自定义是否实现了__ne__()方法,如果有实现则不等比较结果是__ne__()方法执行返回的结果,否则是相等比较结果取反后的值


# 实现__eq__
>>> class Man(): def __init__(self,name):
self.name = name def __eq__(self,other):
return self.name == other.name >>> a = Man('xiaoming')
>>> b = Man('xiaoming')
>>> a == b # 实现了__eq__方法
True
>>> a != b # 实现了__eq__方法,是相等比较结果的取反后结果
False # 同时实现__eq__和__ne__
>>> class Man():
def __init__(self,name):
self.name = name def __eq__(self,other):
return self.name == other.name def __ne__(self,other):
return False >>> a = Man('ming')
>>> b = Man('ming')
>>> a == b
True
>>> a != b
False
# 不能进行大小比
>>> a > b
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a>b
TypeError: unorderable types: Man() > Man()

类似的,如果自定义类实现了__lt __()__le __()__gt __()__ge __()相关方法,则自定义类的不同实例间可以进行大小比较,一般来说,实现__lt __()__le __()2个方法就足够了,这样实例对象就可以进行比较判断了

>>> class Man():

    def __init__(self,name):
self.name = name def __le__(self,other):
return self.name <= other.name def __lt__(self,other):
return self.name < other.name >>> a = Man('a')
>>> b = Man('b')
>>> a > b
False
>>> a >= b
False
>>>

isis not运算符,用来比较2个对象是否含有一样的数值或者指向的是否是同1个对象,它们无法自定义;也可以应用于任何两个对象,从不引发异常。


# 相同类型的对象
>>> 1 is 1
True
>>> 1 is 1.0
False # 不同类型的对象
>>> 1 is '1'
False
>>> 1 is not '1'
True # 类的不同实例对象
>>> a = object()
>>> b = object()
>>> a is b
False

innot in运算符,用来在1个对象是否在序列中,而且只能用于序列类型。


>>> '1' in '12'
True >>> '1' in (1,2,3)
False

Python内置类型(3)——比较的更多相关文章

  1. Python内置类型性能分析

    Python内置类型性能分析 timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass' ...

  2. Python 内置类型 dict, list,线程安全吗

    近段时间发现一个 Python 连接数据库的连接是线程不安全的,结果惹得我哪哪儿都怀疑变量的多线程是否安全的问题,今天终于找到了正确答案,那就是 Python 内置类型 dict,list ,tupl ...

  3. 为什么继承 Python 内置类型会出问题?!

    本文出自"Python为什么"系列,请查看全部文章 不久前,Python猫 给大家推荐了一本书<流畅的Python>(点击可跳转阅读),那篇文章有比较多的"溢 ...

  4. Python——内置类型

    Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...

  5. 易被忽略的Python内置类型

    Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们. 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些"不同寻常&quo ...

  6. Python内置类型——set

    Python中,内置类型set和frozenset用来表示集合,我们首先查看这两个类型支持的特殊对象,从而可以理解他们的特性. >>> dir(set) ['__and__', '_ ...

  7. 3、python内置类型(0529)

    python的内置对象类型以及支持的运算 python对象的相关术语 python程序中保存的所有数据都是围绕对象这个概念展开的 程序中存储的所有数据都是对象 每个对象都有一个身份.一个类型和一个值 ...

  8. python内置类型详细解释

    文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...

  9. Python内置类型(4)--数值

    Python有以下三种的数值类型: 整型(integers), 浮点型(floating point numbers), 以及 复数(complex numbers).此外,布尔是整数的子类型. 数值 ...

  10. Python内置类型——list

    list(列表)是Python内置的可变序列(Sequence)类型,list的对象的方法也都是就地(in-place)更改调用这些方法的列表对象, List的一些细节 可以直接为list的某个下标赋 ...

随机推荐

  1. AI大道理头尾标识

    标题 点击上方“AI大道理”,选择“置顶”公众号 重磅干货,深入讲解AI大道理 —————— 正文 —————— 浅谈则止,深入理解AI大道理 扫描下方“AI大道理”,选择“关注”公众号 欢迎加入!

  2. Python自动化测试用例设计--自动化测试用例与手工测试用例区别与联系

    1. 前言 手工测试用例是针对手工测试人员,自动化测试用例是针对自动化测试框架,前者是手工测试用例人员应用手工方式进行用例解析,后者是应用脚本技术进行用例解析,两者最大的各自特点在于,前者具有较好的异 ...

  3. 2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015)

    题目链接 :  http://codeforces.com/gym/100781/attachments A-Adjoin the Network 题意大概是有多棵树(也可能是一颗),现在要把它们合并 ...

  4. Python积累三:object() take no object!

    A,报错:object() take no object! 根因:代码书写级错误!!!!! 两个原因: 1. __init__ 左右都是2个下划线,这里自己没掉进去! 2.init写成int,不是in ...

  5. logback log4j log4j2 性能实测

    logback log4j log4j2 性能实测 转载: https://blog.souche.com/logback-log4j-log4j2shi-ce/ 日志已经成为系统开发中不可或缺的一部 ...

  6. git基本

    基本的git操作 git config --global user.name "你的名字或昵称" git config --global user.email "你的邮箱 ...

  7. C#中读写INI文件

    C#中读写INI文件 c#的类没有直接提供对ini文件的操作支持,可以自己包装win api的WritePrivateProfileString和GetPrivateProfileString函数实现 ...

  8. 【Selenium】【BugList2】geckodriver未安装,报:WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

    环境信息:Windows7 64位 + python 3.6.5 + selenium 3.11.0 +pyCharm #coding=utf-8 from selenium import webdr ...

  9. http错误代码提示

    1×× 保留 2×× 表示请求成功地接收 3×× 为完成请求客户需进一步细化请求 4×× 客户错误 5×× 服务器错误 200  正常:请求已完成.  201  正常:紧接 POST 命令.  202 ...

  10. SPI通信协议(非原创,转载他人,用于学习)

    SPI通信协议:1.SPI主从模式:2.数据信号的相位与极性:3.数据帧的格式. 一.什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Moto ...