news 2026/5/30 23:54:40

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/5/28 13:19:48

大模型本地部署:Windows PC上从零开始部署ChatGML-6B-int4量化模型

ChatGLM-6B是清华大学知识工程和数据挖掘小组&#xff08;Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University&#xff09;发布的一个开源的对话机器人。6B表示这是ChatGLM模型的60亿参数的小规模版本&#xff0c;约60亿参数。 ChatGML-6B-int4量化…

作者头像 李华
网站建设 2026/5/28 13:27:32

资深AI技术专家20年总结,零AI基础掌握大模型、扩散模型、多模态模型

今天给大家系统地介绍了一本AIGC的各方面内容的书—《AIGC原理与实践&#xff1a;零基础学大语言模型、扩散模型和多模态模型》&#xff0c;这本书从基础知识到应用实践&#xff0c;从基本原理到案例分析&#xff0c;力求通过简洁明了的语言、清晰生动的例子&#xff0c;引导读…

作者头像 李华
网站建设 2026/5/30 5:12:15

Nginx:如何安装Nginx详细教程(总结一)

一、Nginx简介 1. 什么是Nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发&#xff0c;官方测试nginx能够支支撑5万并发链接&#xff0c;并且cpu、内存等资源消耗却非常低&…

作者头像 李华
网站建设 2026/5/28 13:19:49

零基础入门 Spring Boot:从‘Hello World’到可上线的 Web 应用

零基础入门 Spring Boot&#xff1a;从‘Hello World’到可上线的 Web 应用 &#x1f4a1; 适合谁&#xff1f; 完全没写过 Java Web 的新手&#xff0c;会安装软件、能看懂基础代码&#xff08;如 System.out.println&#xff09;&#xff0c;想快速上手一个真实可用的后端框架…

作者头像 李华
网站建设 2026/5/30 20:07:04

2026年小众但好用的免费开源项目管理软件Top10深度推荐

在当今快速发展的数字时代&#xff0c;项目管理软件成为了各类企业和团队不可或缺的工具。随着对高效、灵活且成本可控的需求增加&#xff0c;越来越多的小众开源项目管理软件进入市场&#xff0c;提供了多样化的选择。本篇文章将为您推荐2026年值得关注的十大免费开源项目管理…

作者头像 李华
网站建设 2026/5/30 13:07:39

Java基于Spring Boot+Vue的在线教育与资源管理系统

项目说明 随着互联网技术的迅猛发展和普及&#xff0c;教育领域正经历着前所未有的变革。传统的教育模式已经无法满足现代社会的多元化需求&#xff0c;特别是在信息爆炸的时代背景下&#xff0c;人们更加追求高效、便捷、个性化的学习方式。互联网技术的广泛应用不仅改变了人…

作者头像 李华