Python学习【67】:Python有加减乘除运算,为何要operator模块?

内容分享4小时前发布 Fanxy_JN
0 5 0

一、学前花絮

之前我们学习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 把常见运算封装成类方法(可继承 / 可配置)

程序示例:

Python学习【67】:Python有加减乘除运算,为何要operator模块?

把加减乘除及逻辑运算封装成类

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

Python学习【67】:Python有加减乘除运算,为何要operator模块?

自定义类工具的使用

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

输出结果如下:

Python学习【67】:Python有加减乘除运算,为何要operator模块?

输出结果

2.4 总结operator

operator 模块 = “把 Python 所有运算符变成纯函数” 的官方工具箱;

在需要传递函数的场合(map / reduce / sorted / DSL / 并发管道)用它,比 lambda 更快、更短、更可读。

上面 Calculator 类演示了如何系统化封装这些函数,让业务代码彻底“表达式自由”+“函数式组合”。

三、小结

今天我们学习了python关于运算操作的模块operator,它最大的好处是把加减乘除等运算变为函数,可以作为参数传递。

让我们保持学习热烈,多做练习。我们下期再见!

Python学习【67】:Python有加减乘除运算,为何要operator模块?

快乐男孩

#python#

© 版权声明

相关文章

5 条评论

  • 头像
    洛洛游戏说 投稿者

    直接的加减乘除运算无法作为参数,这就是operator模块的意义

    无记录
    回复
  • 头像
    尚子琦 读者

    Python的operator模块是什么

    无记录
    回复
  • 头像
    散人旅客 读者

    Python的运算模块

    无记录
    回复
  • 头像
    -鬃毛- 投稿者

    operator模块很实用

    无记录
    回复
  • 头像
    心如止水 读者

    收藏了,感谢分享

    无记录
    回复