

Python入门:Python3 operator 模块全面学习教程
Python入门:Python3 operator 模块全面学习教程,本文为 Python3 operator 模块的学习教程,首先指出 Python3 移除 Python2 的 cmp () 函数,operator 模块可替代其实现比较功能,介绍了该模块中与比较运算符对应的 lt ()、le () 等常用方法及双下划线方法,建议优先用无下划线方法,并通过数字、字符串、列表的比较实例展示用法。接着阐述模块提供的与内置运算符对应的高效函数,涵盖数学、序列、逻辑等运算类型,列出常用运算符函数与对应运算符的关系,结合实例演示数学运算、序列操作、逻辑与按位运算等功能。最后总结 operator 模块的核心价值,强调掌握其使用能让 Python 代码更简洁高效,适用于频繁运算或对象比较场景。

前言
Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。


🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。
🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。
🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。
🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。
🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。

🌐 前篇文章咱们练习了 Python3 pip包管理工具全面学习教程 ,如果忘记了,可以去重温一下,不停的重复敲击基础代码,有助于让你更加熟练掌握一门语言。今天咱们继续学习 ,Python3 operator 模块全面学习教程,下面开始吧!
在Python 2.x版本中,我们可以使用cmp()函数轻松比较两个列表、数字或字符串等对象的大小关系。但升级到Python 3.X版本后,cmp()函数被移除。若仍需实现比较功能,官方推荐引入operator模块。该模块不仅能满足对象比较需求,还提供了与Python内置运算符对应的高效率函数,涵盖逻辑运算、数学运算以及序列运算等多种类型,适用于各类对象操作场景。本文将带大家全面学习operator模块的使用方法。
一、对象比较功能:替代cmp()的核心能力
operator模块提供了一系列用于对象比较的方法,这些方法与Python中的比较运算符一一对应,且适用于所有对象。
1.1 常用比较方法及对应关系
| 比较方法 | 对应运算符 | 功能说明 |
|---|---|---|
operator.lt(a, b) | a < b | 判断a是否小于b,返回布尔值 |
operator.le(a, b) | a <= b | 判断a是否小于等于b,返回布尔值 |
operator.eq(a, b) | a == b | 判断a是否等于b,返回布尔值 |
operator.ne(a, b) | a != b | 判断a是否不等于b,返回布尔值 |
operator.ge(a, b) | a >= b | 判断a是否大于等于b,返回布尔值 |
operator.gt(a, b) | a > b | 判断a是否大于b,返回布尔值 |
同时,模块还保留了带有双下划线的方法(如operator.__lt__(a, b)、operator.__le__(a, b)等),这是为了向后兼容性。但为了代码表述更清晰,建议优先使用没有双下划线的方法。
1.2 比较功能实例演示
下面通过实例分别展示对数字、字符串和列表的比较操作:
# 导入 operator 模块
import operator
# 1. 数字比较
x = 10
y = 20
print("数字比较:")
print("x:", x, ", y:", y)
print("operator.lt(x,y): ", operator.lt(x, y)) # 输出True,10<20
print("operator.gt(y,x): ", operator.gt(y, x)) # 输出True,20>10
print("operator.eq(x,x): ", operator.eq(x, x)) # 输出True,10==10
print("operator.ne(y,y): ", operator.ne(y, y)) # 输出False,20!=20不成立
print("operator.le(x,y): ", operator.le(x, y)) # 输出True,10<=20
print("operator.ge(y,x): ", operator.ge(y, x)) # 输出True,20>=10
print()
# 2. 字符串比较(按字符ASCII码顺序比较)
x = "Google"
y = "xcLeigh"
print("字符串比较:")
print("x:", x, ", y:", y)
print("operator.lt(x,y): ", operator.lt(x, y)) # 输出True,'G'的ASCII码小于'R'
print("operator.gt(y,x): ", operator.gt(y, x)) # 输出True,'R'的ASCII码大于'G'
print("operator.eq(x,x): ", operator.eq(x, x)) # 输出True,相同字符串相等
print("operator.ne(y,y): ", operator.ne(y, y)) # 输出False,相同字符串不等不成立
print("operator.le(x,y): ", operator.le(x, y)) # 输出True,'G'<= 'R'
print("operator.ge(y,x): ", operator.ge(y, x)) # 输出True,'R'>= 'G'
print()
# 3. 列表比较(按元素依次比较,直到找到不同元素或比较完所有元素)
a = [1, 2]
b = [2, 3]
c = [2, 3]
print("列表比较:")
print("operator.eq(a,b): ", operator.eq(a, b)) # 输出False,a[0]=1 < b[0]=2,整体列表不等
print("operator.eq(c,b): ", operator.eq(c, b)) # 输出True,c和b的元素完全相同
print()
# 查看比较方法的返回值类型(均为bool类型)
print("operator.lt(x,y)返回值类型: ", type(operator.lt(x, y))) # 输出<class 'bool'>
上述代码运行后,输出结果如下:

数字比较:
x: 10 , y: 20
operator.lt(x,y): True
operator.gt(y,x): True
operator.eq(x,x): True
operator.ne(y,y): False
operator.le(x,y): True
operator.ge(y,x): True
字符串比较:
x: Google , y: xcLeigh
operator.lt(x,y): True
operator.gt(y,x): True
operator.eq(x,x): True
operator.ne(y,y): False
operator.le(x,y): True
operator.ge(y,x): True
列表比较:
operator.eq(a,b): False
operator.eq(c,b): True
operator.lt(x,y)返回值类型: <class 'bool'>
二、运算符函数:高效替代内置运算符
operator模块的另一大核心功能是提供了与Python内置运算符对应的高效率函数,涵盖数学运算、序列运算、逻辑运算等多个类别。使用这些函数,不仅能实现与内置运算符相同的功能,还能在某些场景(如函数式编程)中更灵活地调用。
2.1 常用运算符函数及对应关系
| 运算类型 | 对应运算符 | operator函数 | 功能说明 |
|---|---|---|---|
| 加法 | a + b | add(a, b) | 计算a与b的和 |
| 字符串/序列拼接 | seq1 + seq2 | concat(seq1, seq2) | 将seq2拼接在seq1之后 |
| 包含测试 | obj in seq | contains(seq, obj) | 判断obj是否在seq中,返回布尔值 |
| 除法(真除法) | a / b | truediv(a, b) | 计算a除以b的结果,保留小数 |
| 除法(地板除) | a // b | floordiv(a, b) | 计算a除以b的结果,向下取整 |
| 按位与 | a & b | and_(a, b) | 对a和b进行按位与运算 |
| 按位异或 | a ^ b | xor(a, b) | 对a和b进行按位异或运算 |
| 按位取反 | ~a | invert(a) | 对a进行按位取反运算 |
| 按位或 | `a | b` | or_(a, b) |
| 取幂 | a ** b | pow(a, b) | 计算a的b次方 |
| 标识判断 | a is b | is_(a, b) | 判断a和b是否为同一对象,返回布尔值 |
| 标识否定判断 | a is not b | is_not(a, b) | 判断a和b是否不为同一对象,返回布尔值 |
| 索引赋值 | obj[k] = v | setitem(obj, k, v) | 将obj中索引k处的值设为v |
| 索引删除 | del obj[k] | delitem(obj, k) | 删除obj中索引k处的元素 |
| 索引取值 | obj[k] | getitem(obj, k) | 获取obj中索引k处的值 |
| 左移 | a << b | lshift(a, b) | 将a的二进制表示向左移b位 |
| 取模 | a % b | mod(a, b) | 计算a除以b的余数 |
| 乘法 | a * b | mul(a, b) | 计算a与b的乘积(序列则为重复拼接) |
| 矩阵乘法 | a @ b | matmul(a, b) | 计算矩阵a与矩阵b的乘积(适用于numpy数组等) |
| 算术取反 | -a | neg(a) | 返回a的相反数 |
| 逻辑取反 | not a | not_(a) | 对a进行逻辑取反,返回布尔值 |
| 正数 | +a | pos(a) | 返回a本身(保持符号不变) |
| 右移 | a >> b | rshift(a, b) | 将a的二进制表示向右移b位 |
| 切片赋值 | seq[i:j] = values | setitem(seq, slice(i, j), values) | 将seq中i到j(不包含j)的切片替换为values |
| 切片删除 | del seq[i:j] | delitem(seq, slice(i, j)) | 删除seq中i到j(不包含j)的切片 |
| 切片取值 | seq[i:j] | getitem(seq, slice(i, j)) | 获取seq中i到j(不包含j)的切片 |
| 字符串格式化 | s % obj | mod(s, obj) | 按照s的格式对obj进行格式化 |
| 减法 | a - b | sub(a, b) | 计算a与b的差 |
| 真值测试 | obj | truth(obj) | 判断obj是否为真值,返回布尔值 |
2.2 运算符函数实例演示
下面通过实例展示常用运算符函数的使用:
# 导入 operator 模块
import operator
# 1. 数学运算(加、减、乘、除、取模、取幂)
a = 4
b = 3
print("数学运算:")
print("add() 运算结果(4+3):", operator.add(a, b)) # 输出7
print("sub() 运算结果(4-3):", operator.sub(a, b)) # 输出1
print("mul() 运算结果(4*3):", operator.mul(a, b)) # 输出12
print("truediv() 运算结果(4/3):", operator.truediv(a, b)) # 输出1.3333333333333333
print("floordiv() 运算结果(4//3):", operator.floordiv(a, b)) # 输出1
print("mod() 运算结果(4%3):", operator.mod(a, b)) # 输出1
print("pow() 运算结果(4**3):", operator.pow(a, b)) # 输出64
print()
# 2. 序列运算(拼接、索引取值/赋值/删除、切片取值/赋值/删除)
# 字符串拼接
seq1 = "Hello"
seq2 = "World"
print("序列运算:")
print("concat() 字符串拼接结果:", operator.concat(seq1, seq2)) # 输出HelloWorld
# 列表索引操作
lst = [10, 20, 30, 40]
print("原列表:", lst)
# 索引取值
print("getitem() 索引1取值:", operator.getitem(lst, 1)) # 输出20
# 索引赋值
operator.setitem(lst, 1, 200)
print("setitem() 索引1赋值后列表:", lst) # 输出[10, 200, 30, 40]
# 索引删除
operator.delitem(lst, 2)
print("delitem() 索引2删除后列表:", lst) # 输出[10, 200, 40]
# 列表切片操作
lst2 = [1, 2, 3, 4, 5]
print("原列表2:", lst2)
# 切片取值(1到3,不包含3)
print("getitem() 切片1:3取值:", operator.getitem(lst2, slice(1, 3))) # 输出[2, 3]
# 切片赋值
operator.setitem(lst2, slice(1, 3), [20, 30])
print("setitem() 切片1:3赋值后列表2:", lst2) # 输出[1, 20, 30, 4, 5]
# 切片删除
operator.delitem(lst2, slice(1, 3))
print("delitem() 切片1:3删除后列表2:", lst2) # 输出[1, 4, 5]
print()
# 3. 逻辑与按位运算(包含测试、逻辑取反、按位与/或/异或)
# 包含测试
seq = [1, 2, 3, 4]
obj1 = 2
obj2 = 5
print("逻辑与按位运算:")
print("contains() 判断", obj1, "是否在", seq, "中:", operator.contains(seq, obj1)) # 输出True
print("contains() 判断", obj2, "是否在", seq, "中:", operator.contains(seq, obj2)) # 输出False
# 逻辑取反
bool_val = True
print("not_() 逻辑取反结果(对True取反):", operator.not_(bool_val)) # 输出False
# 按位运算
x = 6 # 二进制:110
y = 3 # 二进制:011
print("and_() 按位与结果(6&3):", operator.and_(x, y)) # 二进制10,输出2
print("or_() 按位或结果(6|3):", operator.or_(x, y)) # 二进制111,输出7
print("xor_() 按位异或结果(6^3):", operator.xor(x, y)) # 二进制101,输出5
代码运行结果如下:
数学运算:
add() 运算结果(4+3): 7
sub() 运算结果(4-3): 1
mul() 运算结果(4*3): 12
truediv() 运算结果(4/3): 1.3333333333333333
floordiv() 运算结果(4//3): 1
mod() 运算结果(4%3): 1
pow() 运算结果(4**3): 64
序列运算:
concat() 字符串拼接结果: HelloWorld
原列表: [10, 20, 30, 40]
getitem() 索引1取值: 20
setitem() 索引1赋值后列表: [10, 200, 30, 40]
delitem() 索引2删除后列表: [10, 200, 40]
原列表2: [1, 2, 3, 4, 5]
getitem() 切片1:3取值: [2, 3]
setitem() 切片1:3赋值后列表2: [1, 20, 30, 4, 5]
delitem() 切片1:3删除后列表2: [1, 4, 5]
逻辑与按位运算:
contains() 判断 2 是否在 [1, 2, 3, 4] 中: True
contains() 判断 5 是否在 [1, 2, 3, 4] 中: False
not_() 逻辑取反结果(对True取反): False
and_() 按位与结果(6&3): 2
or_() 按位或结果(6|3): 7
xor_() 按位异或结果(6^3): 5
三、总结
operator模块是Python 3中替代cmp()函数的重要工具,同时也是优化运算符使用、提升代码灵活性的关键模块。本文从对象比较和运算符函数两大核心功能出发,详细介绍了模块的常用方法、对应关系及实例用法:
- 对象比较:通过
lt()、le()、eq()等方法,可实现对数字、字符串、列表等各类对象的比较,完全替代Python 2的cmp()函数。 - 运算符函数:涵盖数学运算、序列运算、逻辑运算等多个维度,不仅能实现与内置运算符相同的功能,还能在函数式编程(如结合
map()、filter()使用)等场景中发挥优势。
掌握operator模块的使用,能让我们的Python代码更简洁、高效,尤其在需要频繁使用运算符或进行对象比较的场景中,效果更为明显。建议大家在实际开发中根据需求灵活运用该模块的各类方法。
💡下一篇咱们学习 Python入门:Python math模块全面学习教程!
附录:扩展学习资源
- 官方资源:
- Python官网:https://www.python.org
- PyPI:https://pypi.org(查找第三方库)
- 安装包等相关文件(另附带pycharm工具),网盘下载地址:https://pan.quark.cn/s/649af731037c
- 学习资料视频和文档资源,网盘下载地址: https://pan.quark.cn/s/ee16901a8954
- 本专栏特色资源:
- 代码资源仓库:CSDN专属资源在线获取
- 海量Python教程:关注公众号:xcLeigh,获取网盘地址
- 一对一答疑:添加微信与博主在线沟通(
备注“Python专栏”)
联系博主
xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
💞 关注博主 🌀 带你实现畅游前后端!
🏰 大屏可视化 🌀 带你体验酷炫大屏!
💯 神秘个人简介 🌀 带你体验不一样得介绍!
🥇 从零到一学习Python 🌀 带你玩转Python技术流!
🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!
💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。

📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_43151418/article/details/151717589



