news 2026/2/25 23:21:29

Python入门:Python3 operator模块全面学习教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python入门:Python3 operator模块全面学习教程

Python3 operator 模块全面学习教程
(适合 Python 入门到中级开发者,2025–2026 实用视角)

operator是 Python 标准库中非常实用但经常被忽视的一个模块,它把常见的运算符(+、-、*、==、and、getitem、len 等)变成了函数形式,极大方便了函数式编程、高阶函数、排序 key、map、reduce、functools 等场景。

一、为什么需要 operator 模块?

最常见的两种写法对比:

# 传统写法(lambda 较多)sorted(users,key=lambdau:u.age)list(map(lambdax:x[1],items))reduce(lambdax,y:x+y,numbers,0)# 使用 operator 写法(更简洁、可读性更好)fromoperatorimportattrgetter,itemgetter,addsorted(users,key=attrgetter('age'))list(map(itemgetter(1),items))reduce(add,numbers,0)

核心优势

  • 性能略优(避免创建 lambda 函数)
  • 代码更简洁、可读
  • functools.partialitertools等配合极佳
  • 可直接作为高阶函数参数

二、operator 模块核心函数分类(2025 常用)

1. 算术运算(最常用)
函数等价运算符示例代码典型使用场景
add(a,b)a + badd(3,5)→ 8reduce 加法
sub(a,b)a - b
mul(a,b)a * breduce 乘法
truediv(a,b)a / bPython 3 默认真除法
floordiv(a,b)a // b地板除
mod(a,b)a % b
pow(a,b)a ** bpow(2,10)→ 1024
neg(obj)-obj取负
pos(obj)+obj(几乎不用)
abs(obj)abs(obj)等价于内置 abs()
2. 比较运算(非常常用)
函数等价运算符典型使用场景
eq(a,b)a == bfilter、groupby
ne(a,b)a != b
lt(a,b)a < bsorted key、heapq
le(a,b)a <= b
gt(a,b)a > b
ge(a,b)a >= b
3. 逻辑运算(使用频率中等)
函数等价运算符注意事项
and_(a,b)a and b返回的是后者(不是 True/False)
or_(a,b)a or b返回的是前者或后者
not_(obj)not obj

重要提醒operator.and_and的行为完全一致,都是短路求值并返回原值,而不是布尔值。

4. 序列/容器操作(非常非常常用)
函数作用典型用法
itemgetter(*items)获取容器指定位置/键的值sorted(lst, key=itemgetter(1))
attrgetter(*attrs)获取对象指定属性sorted(users, key=attrgetter('age'))
methodcaller(name, /, *args, **kwargs)调用对象的方法methodcaller('lower')('Hello')→ ‘hello’

itemgetter 与 attrgetter 对比(最常考)

fromoperatorimportitemgetter,attrgetter students=[{'name':'Tom','score':98,'age':19},{'name':'Jerry','score':85,'age':20},]# 多字段排序(先按分数降序,相同分数按年龄升序)sorted(students,key=itemgetter('score','age'),reverse=True)# 错误写法# 正确写法:需要组合多个 itemgetter 或使用 lambdafromfunctoolsimportcmp_to_keysorted(students,key=lambdax:(-x['score'],x['age']))# 传统写法# operator 优雅写法(推荐)fromoperatorimportitemgetter,negsorted(students,key=lambdax:(neg(x['score']),x['age']))

更推荐的现代写法(Python 3.10+):

fromoperatorimportitemgetter# 多字段 + 部分反序get_score=itemgetter('score')get_age=itemgetter('age')sorted(students,key=lambdax:(-get_score(x),get_age(x)))
5. 位运算(使用较少,但很纯粹)
函数运算符说明
and_(a,b)&按位与
or_(a,b)|按位或
xor(a,b)^按位异或
inv(obj)~按位取反
lshift(a,b)<<左移
rshift(a,b)>>右移
6. 其他实用函数(进阶)
函数作用典型场景
concat(a,b)a + b(序列拼接)reduce 拼接列表
iconcat(a,b)a += b(就地拼接)
delitem(a,b)del a[b]
setitem(a,b,c)a[b] = c
length_hint(obj)获取容器大致长度(C++风格)预分配内存时有用
indexOf(a,b)a.index(b)
countOf(a,b)a.count(b)

总结表格:最值得记住的 10 个 operator 函数(2025–2026 面试/实战 Top10)

排名函数主要用途出现频率
1itemgetter按元组/列表/字典的第 n 项排序、取值★★★★★
2attrgetter按对象属性排序、取值★★★★★
3methodcaller调用对象方法(常用于 map)★★★★
4add / mulreduce 求和、求积★★★★
5lt / gt / eq自定义比较函数★★★
6and_ / or_函数式逻辑运算★★★
7neg反转排序(配合 sorted reverse=False)★★★
8truediv / floordiv函数式除法★★
9setitem / delitem函数式修改容器★★
10concatreduce 拼接序列★★

练习建议(由浅入深)

  1. itemgetter实现按字典中某个 key 排序
  2. attrgetter对对象列表多字段排序(分数降序 + 年龄升序)
  3. methodcaller+map把一堆字符串全部转小写
  4. reduce+add/mul实现求和、求积
  5. 尝试用operator重写一个曾经写过很多 lambda 的 sorted / max / min 场景

如果你想看某个具体场景的完整代码示例(比如多字段复杂排序、groupby 配合、与 pandas 结合等),可以直接告诉我,我可以立刻给出针对性代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 8:43:47

Nodejs+vueAndroid的垃圾分类系统小程序

文章目录技术架构核心功能数据处理性能优化部署方案--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;技术架构 Node.js 作为后端服务框架&#xff0c;提供 RESTful API 接口处理数据逻辑。Vue.js 构建前端交互界面&…

作者头像 李华
网站建设 2026/2/24 6:58:15

nginx和openresty和apisix区别

名称 定位 核心功能 Nginx 高性能 Web 服务器 / 反向代理 / 负载均衡器 采用c语言,核心是反向代理、负载均衡功能。 可以作为web静态文件服务、SSL/TLS 卸载功能。 OpenResty Nginx + Lua 扩展平台 Nginx + LuaJIT + 丰富第三方 Lua 模块,可以直接用 Lua 编写请求处理逻辑,…

作者头像 李华
网站建设 2026/2/24 2:50:24

用 Claude Code 重新定义编程效率:一次真实开发实践

从「手写代码」到「与 AI 协作编程」&#xff0c;我在真实项目中感受到的效率跃迁。一、为什么说 AI 编程已经进入「可实战」阶段&#xff1f; 过去几年&#xff0c;AI 编程助手更多停留在 代码补全、示例生成 的层面&#xff0c;像是一个“高级搜索引擎”。 而 Claude Code 的…

作者头像 李华
网站建设 2026/2/24 11:12:46

宋慧乔喜欢玩Switch吗?明星同款游戏机解读

关于“宋慧乔switch”这个话题&#xff0c;我理解大家想了解的是韩国顶尖演员宋慧乔与任天堂Switch游戏机之间可能存在的联系。目前并没有官方消息证实宋慧乔是Switch的深度玩家或与之有商业合作&#xff0c;但这并不妨碍我们探讨娱乐明星与热门游戏主机跨界可能产生的火花。从…

作者头像 李华
网站建设 2026/2/25 9:24:01

计算机毕业设计之jsp连锁花店管理平台

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活方式…

作者头像 李华