云计算百科
云计算领域专业知识百科平台

Python3 operator模块高效使用指南

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)

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Python3 operator模块高效使用指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!