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. js正则积累

    判断是否为数字 function isNumber(val){ var regPos = /^\d+(\.\d+)?$/; //非负浮点数 var regNeg = /^(-(([0-9]+\.[0- ...

  2. Mobile Computing: the Next Decade论文 cloudlet薄云

    1 Introduction “Information at your fingertips anywhere, anytime” has been the driving vision of mob ...

  3. Step by Step Guide on Yanhua ACDP Clear BMW EGS ISN

    Yanhua Mini ACDP authorize new function on BMW EGS ISN clearing.So here UOBDII want to share this st ...

  4. 设计模式学习心得<工厂方法 Factory Method>

    概述 意图 业务代码中常常有构造对象的过程,它拥有大量的参数.并且有很多地方需要这对象. 简化对象构造过程. 主要解决 一个类在不同场景的频繁地创建,让不同对象的创建更有语义化,提高代码复用性. 何时 ...

  5. Android Studio导入第三方jar包或依赖工程的方法

    Android Studio导入第三方jar包或依赖工程的方法   一 导入jar包的方法 1.打开自己的工程,将需要导入的jar包copy到libs文件夹下 2.在导入的jar包处单击菜单 Add ...

  6. for循环的实例

    1.大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如//首先我们要知道一百石粮食需要这些马分别几匹 //第一个是大马,需要五十匹马for(var x=0;x&l ...

  7. 网站日志流量分析采集(LuaJIT系统环境部署-node03,相关jar包自己手动上传)

    注:/usr/local/src 是源码包路径,可以自己更改 服务器中安装依赖 yum -y install gcc perl pcre-devel openssl openssl-devel 上传 ...

  8. (PMP)第12章-----项目采购管理

    B D 12.1 规划采购管理 输入 工具与技术 输出 1.项目章程 2.商业文件 (商业文件, 效益管理计划) 3.项目管理计划 (范围,质量,资源管理计划, 范围基准) 4.项目文件 (里程碑清单 ...

  9. MySQL-5.7安装

    2.1 下载mysql 网址:https://www.mysql.com/ [root@localhost ~]# mkdir -p /root/soft/MySQL [root@localhost ...

  10. 前端之js

    简介:     JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互,JavaScript是浏览器解释执行的 前端三大块    ...