一、学前花絮
之前我们学习Python基础知识的时候,最常见的就是数学运算和逻辑运算,也就是加减乘除以及比较大小等运算。而operator模块集成了所有的运算有什么用呢?
这个问题,只有在我们实际项目中才会了解。列如有一种场景,我们需要把运算的函数名传递给另一个函数,如果不用operator模块的话,就需要用lambda匿名函数,否则直接写操作符是不可以的。
下面我们开始正式的学习。
二、Python的operator模块
2.1 operator模块定义及功能描述
把 Python 所有内置运算、序列/属性访问、位运算等全部暴露成“纯函数”,方便在函数式编程场景(map / reduce / filter / sorted / 分组 / 管道)里把运算符当参数传递,而不用写 lambda 或自己实现 C 扩展。
性能优势:
这些函数全部用 C 实现,比手写 lambda 快 10-30%;在千万级循环里能省明显时间。
2.2 为什么“直接写 + − * /”不够?
表达式无法当参数:
reduce(lambda a,b: a+b, data) 比 reduce(operator.add, data) 慢且啰嗦。
自定义 DSL / 解释器 / 规则引擎:
用字符串 '+' 映射到 operator.add,避免 eval。
与 Cython / NumPy / 并发管道对接时,函数指针比 Python 对象调用轻量。
2.3 把常见运算封装成类方法(可继承 / 可配置)
程序示例:

把加减乘除及逻辑运算封装成类
以上程序,我们把所有的算数运算、位运算、比较运算以及对象/序列访问都封装成类的方法。便于后期的调用。下面是主程序调用:

自定义类工具的使用
以上程序中的reduce是聚合运算的函数,简单说就是把一串数“压”成一个值。在许多场景我们也会用到map函数,它的特点是1:1传递,原参数是一串数,结果还是一串数。
输出结果如下:

输出结果
2.4 总结operator
operator 模块 = “把 Python 所有运算符变成纯函数” 的官方工具箱;
在需要传递函数的场合(map / reduce / sorted / DSL / 并发管道)用它,比 lambda 更快、更短、更可读。
上面 Calculator 类演示了如何系统化封装这些函数,让业务代码彻底“表达式自由”+“函数式组合”。
三、小结
今天我们学习了python关于运算操作的模块operator,它最大的好处是把加减乘除等运算变为函数,可以作为参数传递。
让我们保持学习热烈,多做练习。我们下期再见!

快乐男孩
#python#

直接的加减乘除运算无法作为参数,这就是operator模块的意义
Python的operator模块是什么
Python的运算模块
operator模块很实用
收藏了,感谢分享