为什么Python中称__lt__、__gt__等为“富比较”方法
Python中基类object提供了一系列可以用于实现同类对象进行“比较”的方法,可以用于同类对象的不同实例进行比较,包括__lt__、__gt__、__le__、__ge__、__eq__和__ne__
六个方法。
那么为什么叫“富比较”(“rich comparison”)方法呢?查了相关资料,并没有看到权威的定义,老猿结合网上零星的资料,分析原因如下:
- Python2.1以前的比较方法只提供一个__cmp__方法,没有__lt__等6个方法,相对__cmp__一个方法来说,现在的比对方法种类丰富了,Python 2.1引入了富比较方法,Python3.4之后作废了__cmp__方法;
- 比较方法除了简单的比较大小之外,还可以用于排序,从Python2.4开始,排序方法sort() 和 函数sorted() 都增加了一个 ‘key’ 参数,用来在进行比较之前指定每个元素上要调用的函数,这个函数的返回值老猿认为只要是任何可比较大小的数据类型(含定义了__lt__方法的自定义类)都可以,这种返回值比单纯的__cmp__三个返回值(0、1、-1)范围更丰富;
- 对于支持复杂比较的类,每种比较方法调用对应的独立富比较方法而无需共用一个__cmp__方法,从而比一个__cmp__方法要考虑不同情况的实现简单、运行时性能高效;
- 富比较方法可以直接映射到对应的操作符如“<”,操作更方便简洁。
以上分析,不知是否正确和全面,请各位大拿指教。
关于富比较方法的介绍请大家参考:
1、《第8.21节 Python中__lt__、__gt__等 “富比较”(“rich comparison”)方法用途探究》
2、《第8.22节 Python案例详解:重写 “富比较”方法控制比较逻辑》。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
为什么Python中称__lt__、__gt__等为“富比较”方法的更多相关文章
- 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析
一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
- Python中多个列表与字典的合并方法
Python中多个列表与字典的合并方法 1多列表的合并 1)a+=b a=['] b = ['] a += b print(a) >>>['] 2) a.extend(b) a=[' ...
- Python中elasticsearch插入和更新数据的实现方法
Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...
- 在Python中使用glob模块查找文件路径的方法
在Python中使用glob模块查找文件路径的方法 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符: ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- 快速理解Python中使用百分号占位符的字符串格式化方法中%s和%r的输出内容的区别
<Python中使用百分号占位符的字符串格式化方法中%s和%r的输出内容有何不同?>老猿介绍了二者的区别,为了快速理解,老猿在此使用另外一种方式补充说明一下: 1.使用%r是调用objec ...
- Python中使用百分号占位符的字符串格式化方法中%s和%r的输出内容有何不同?
Python中使用百分号占位符的字符串格式化方法中%s和%r表示需要显示的数据对应变量x会以str(x)还是repr(x)输出内容展示. 关于str和repr的关系请见: <Python中rep ...
- python中try except处理程序异常的三种常用方法
如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序: try: 语句1 语句2 . . 语句N except .........: do somet ...
随机推荐
- 知识补充之Django信号量
信号 抛砖引玉 1.如何对数据库的增加操作记录日志 2.信号比中间件的区别 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特 ...
- vuex和axios的基本操作
1.在src目录下创建一个api 是用于集中处理axios的相关配置 index.js就是处理axios的文件 具体如何使用axios 还请百度axios 2.URLs.js是存放需要请求的地址的 3 ...
- 易于理解的 python 深度学习摘要算法教程
序 "我不想要一份完整的报告,只要给我一份结果摘要就好".我经常发现自己处于这种状况 -- 无论是在大学里还是在我的职业生涯中.我们准备一份全面的报告,但老师/主管却只有时间阅读摘 ...
- C\C++语言重点——指针篇 | 为什么指针被誉为 C 语言灵魂?(一文让你完全搞懂指针)
本篇文章来自小北学长的公众号,仅做学习使用,部分内容做了适当理解性修改和添加了博主的个人经历. 注:这篇文章好好看完一定会让你掌握好指针的本质! 看到标题有没有想到什么? 是的,这一篇的文章主题是「指 ...
- Exactly Once 语义
将服务器的 ACK 级别设置为-1,可以保证 Producer 到 Server 之间不会丢失数据,即 At Least Once 语义. 相对的,将服务器 ACK 级别设置为 0,可以保证生产者每条 ...
- python之ftp与paramiko与hasattr与getattr
为了方便树莓派和电脑上相互传输数据文件的传输.也就是上传和下载文件,我自己就写了一个ftp 主要是运用到hasattr与getattr 先看一下服务器上的程序吧 # _*_coding:utf-8_* ...
- python实现祝福弹窗
接下来教大家怎么用python献上满满的祝福.首先给大家看一下最终模样. 注:密集恐惧症患者勿入! 模样大家已经看见了,首先想想一下,当朋友打开你发送过去的软件, 然后点击运行,结果,一个一个的窗口慢 ...
- C语言设计模式(命令模式)
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) typedef int (*parse_func)(const char *data,size_t len ...
- Spring Cloud注册中心之Consul
Consul简介 Consul是HashiCorp公司使用Golang语言开发的一中多服务解决方案工具,相比于其他服务注册中心来说,Consul的功能更为强大,丰富,其中最基本的功能包含下面几点(翻译 ...
- MySQL 的常用引擎
1. InnoDB InnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件. InnoDB 中存在表锁和行锁,不过行锁是在命中索引 ...