Python3 operator模块全面学习教程
一、模块概述
operator模块为Python的内置运算符提供了函数式接口。它包含与比较运算、逻辑运算、数学运算等对应的函数,可替代lambda表达式,提升代码可读性和执行效率。
二、常用函数分类
1. 算术运算
import operator as op
print(op.add(3, 5)) # 8 → 加法
print(op.sub(10, 4)) # 6 → 减法
print(op.mul(2, 6)) # 12 → 乘法
print(op.truediv(9, 3)) # 3.0 → 真除法
print(op.floordiv(7, 2)) # 3 → 取整除法
print(op.mod(13, 5)) # 3 → 取模
print(op.pow(2, 4)) # 16 → 幂运算
2. 比较运算
data = [('Alice', 25), ('Bob', 20), ('Charlie', 30)]
sorted_data = sorted(data, key=op.itemgetter(1)) # 按年龄升序排序
print(op.eq(10, 10)) # True → 等于
print(op.ne(7, 3)) # True → 不等于
print(op.lt(5, 8)) # True → 小于
print(op.le(6, 6)) # True → 小于等于
3. 逻辑运算
print(op.not_(True)) # False → 逻辑非
print(op.and_(True, False)) # False → 逻辑与
print(op.or_(False, True)) # True → 逻辑或
4. 序列操作
my_list = [1, 2, 3, 4]
print(op.concat([1,2], [3,4])) # [1,2,3,4] → 序列连接
print(op.contains([10,20], 20)) # True → 包含检测
print(op.countOf([5,5,5], 5)) # 3 → 计数
三、高阶函数应用
1. itemgetter 对象
get_second = op.itemgetter(1) # 获取序列第二个元素
print(get_second(['a','b','c'])) # 'b'
# 多级排序示例
students = [('Bob', 'B', 15), ('Alice', 'A', 20), ('Chris', 'B', 18)]
sorted_students = sorted(students, key=op.itemgetter(1, 2))
2. attrgetter 对象
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
people = [Person('Tom', 30), Person('Jerry', 25)]
get_age = op.attrgetter('age') # 获取age属性
print([get_age(p) for p in people]) # [30, 25]
3. 函数式编程
from functools import reduce
result = reduce(op.add, [1,2,3,4]) # 等效于 sum([1,2,3,4])
print(result) # 10
http://my.tv.sohu.com/us/441191809/699557154.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzE1NC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557159.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzE1OS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557321.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzMyMS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557097.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzA5Ny5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557174.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzE3NC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557406.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzQwNi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557283.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzI4My5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557345.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzM0NS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557289.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzI4OS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557193.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzE5My5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557429.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzQyOS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557436.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzQzNi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557621.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzYyMS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557629.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzYyOS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557454.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzQ1NC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557636.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzYzNi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557533.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzUzMy5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557538.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzUzOC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557400.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzQwMC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557705.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzcwNS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557720.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzcyMC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557560.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzU2MC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557497.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzQ5Ny5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557672.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzY3Mi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557744.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzc0NC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557752.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzc1Mi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557574.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzU3NC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557768.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzc2OC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557690.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzY5MC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557833.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzgzMy5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557902.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzkwMi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558012.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODAxMi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558018.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODAxOC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557912.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzkxMi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557857.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzg1Ny5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557862.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzg2Mi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557868.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzg2OC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557928.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1NzkyOC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558118.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODExOC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557881.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzg4MS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558056.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODA1Ni5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557891.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzg5MS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558140.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODE0MC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558142.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODE0Mi5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558205.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODIwNS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699557969.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1Nzk2OS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558159.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODE1OS5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558163.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODE2My5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558100.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODEwMC5zaHRtbA==.html http://my.tv.sohu.com/us/441191809/699558234.shtml https://tv.sohu.com/v/dXMvNDQxMTkxODA5LzY5OTU1ODIzNC5zaHRtbA==.html
四、实用技巧
替代lambda operator.add 比 lambda x,y: x+y 更高效
# 传统方式
sorted(names, key=lambda x: x[1])
# 优化方式
sorted(names, key=op.itemgetter(1))
方法调用器
upper_all = map(op.methodcaller('upper'), ['a','b','c'])
print(list(upper_all)) # ['A','B','C']
自定义运算符
def vector_add(v1, v2):
return tuple(map(op.add, v1, v2))
print(vector_add((1,2), (3,4))) # (4,6)
五、性能优势
在循环密集型操作中,operator模块比等价的lambda表达式快约20%-30%:
import timeit
lambda_time = timeit.timeit(
'sorted(data, key=lambda x: x[1])',
setup='data=[(i, i%10) for i in range(1000)]',
number=1000
)
op_time = timeit.timeit(
'sorted(data, key=op.itemgetter(1))',
setup='import operator as op; data=[(i, i%10) for i in range(1000)]',
number=1000
)
print(f"Lambda耗时: {lambda_time:.4f}s")
print(f"Operator耗时: {op_time:.4f}s")
六、总结
通过operator模块可实现:
- 更清晰的函数式编程
- 更高效的序列操作
- 更优雅的属性/元素访问
- 更快速的运算执行
建议在涉及大量简单运算的场景中优先使用此模块,但需注意在简单表达式场景中直接使用运算符可能更直观:
# 简单场景
x + y # 优于 operator.add(x, y)
# 复杂场景
reduce(op.add, large_list) # 优于 reduce(lambda a,b: a+b, large_list)
网硕互联帮助中心



评论前必须登录!
注册