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

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

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

一、为什么需要 operator 模块?

最常见的两种写法对比:

# 传统写法(lambda 较多)
sorted(users, key=lambda u: u.age)
list(map(lambda x: x[1], items))
reduce(lambda x,y: x+y, numbers, 0)

# 使用 operator 写法(更简洁、可读性更好)
from operator import attrgetter, itemgetter, add

sorted(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 对比(最常考)

from operator import itemgetter, attrgetter

students = [
    {'name':'Tom', 'score':98, 'age':19},
    {'name':'Jerry','score':85, 'age':20},
]

# 多字段排序(先按分数降序,相同分数按年龄升序)
sorted(students, key=itemgetter('score','age'), reverse=True)   # 错误写法

# 正确写法:需要组合多个 itemgetter 或使用 lambda
from functools import cmp_to_key
sorted(students,
       key=lambda x: (-x['score'], x['age']))   # 传统写法

# operator 优雅写法(推荐)
from operator import itemgetter, neg
sorted(students,
       key=lambda x: (neg(x['score']), x['age']))

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

from operator import itemgetter

# 多字段 + 部分反序
get_score = itemgetter('score')
get_age   = itemgetter('age')

sorted(students,
       key=lambda x: (-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 结合等),可以直接告诉我,我可以立刻给出针对性代码。

文章已创建 4206

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部