Python 中Operator模块的使用


Posted in Python onJanuary 30, 2021

Python 中的 Operator 模块可以让它支持函数式编程。

1 计算函数

假设我们需要一个计算阶乘的函数,一般做法是使用递归。如果使用函数式编程,可以有两种方式,一种 lambda,另一种使用 Operator 模块中的算术函数。我们做个比较。

首先使用 lambda 方式来实现:

from functools import reduce
def fact(n):
  return reduce(lambda a, b: a * b, range(1, n + 1))

这里用到了 reduce 方法,reduce() 函数语法:reduce(function, iterable[, initializer])。其中的 function 函数有两个参数。reduce() 函数会先对集合中的第 1、2 个元素进行 function 函数处理,得到的结果再与第三个元素进行 function 函数处理,最后得到一个结果1。

reduce() 函数中的 function 使用 lambda 表达式。第二个入参 iterable 使用 range() 方法来生成。

接着使用 Operator 模块中的 mul 函数来实现阶乘:

from operator import mul
def factWithMul(n):
  return reduce(mul, range(1, n + 1))

相对来说,使用 Operator 模块中的计算函数,代码更加简洁。

从源码上分析,mul 函数就是计算两个入参的乘积:

def mul(a, b):
  "Same as a * b."
  return a * b

Operator 模块内部还定义了很多类似的计算函数,比如:

Python 中Operator模块的使用

2 过滤函数

operator 模块中还有一类函数能够起到条件过滤的作用。

首先介绍 itemgetter 函数。假设定义了一个 f 函数,f = itemgetter(2),那么如果调用 f(r),实际会返回 r[2]。也就是说,传入的入参 r,最终返回的只是 r 的索引值为 2 (从 1 开始计算)那一部分。

itemgetter 函数应用场景是:根据元组的某个字段对元组列表进行排序。比如我们有一段 JSON 格式的城市数据,需要对其简称进行排序:

from operator import itemgetter

metro_areas = [('Tokyo', 'JP', 36.933, (35.689722, 139.691667)), ('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)),
        ('Mexico City', 'MX', 20.142, (19.433333, -99.133333)),
        ('New York-Newark', 'US', 20.104, (40.808611, -74.020386)),
        ('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833)),
        ]
for city in sorted(metro_areas, key=itemgetter(1)):
  logging.info('city -> %s', city)

运行结果:

INFO - city -> ('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833))
INFO - city -> ('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889))
INFO - city -> ('Tokyo', 'JP', 36.933, (35.689722, 139.691667))
INFO - city -> ('Mexico City', 'MX', 20.142, (19.433333, -99.133333))
INFO - city -> ('New York-Newark', 'US', 20.104, (40.808611, -74.020386))

城市数据数组中的每一个元素,拆分来看,就是元组形式。 itemgetter 函数取出元组的第二个值作为 sorted 函数的排序依据。

如果传入 itemgetter 的入参不止一个,那么它就是一个过滤函数,只把需要的列过滤出来。

比如我们只需要城市数组中的城市简称与所在坐标,就可以这么做:

cc_name = itemgetter(1, 3)
for city in metro_areas:
logging.info('city -> %s', cc_name(city))

运行结果:

INFO - city -> ('JP', (35.689722, 139.691667))
INFO - city -> ('IN', (28.613889, 77.208889))
INFO - city -> ('MX', (19.433333, -99.133333))
INFO - city -> ('US', (40.808611, -74.020386))
INFO - city -> ('BR', (-23.547778, -46.635833))

以上就是Python 中Operator模块的使用的详细内容,更多关于Python 中Operator模块的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之集成开发环境(IDE)
Sep 12 Python
python使用opencv读取图片的实例
Aug 17 Python
python实现读Excel写入.txt的方法
Apr 29 Python
python list是否包含另一个list所有元素的实例
May 04 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
详解python中eval函数的作用
Oct 22 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
python 实现IP子网计算
Feb 18 Python
详解Python魔法方法之描述符类
May 26 Python
python多线程爬取西刺代理的示例代码
Jan 30 #Python
Python如何实现Paramiko的二次封装
Jan 30 #Python
python实现按日期归档文件
Jan 30 #Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 #Python
如何用Django处理gzip数据流
Jan 29 #Python
Spy++的使用方法及下载教程
Jan 29 #Python
Python实现随机爬山算法
Jan 29 #Python
You might like
提问的智慧(2)
2006/10/09 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
全面理解闭包机制
2016/07/11 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
用python做游戏的细节详解
2019/06/25 Python
Python实现数字的格式化输出
2020/08/01 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
python openCV自制绘画板
2020/10/27 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
资深财务管理人员自我评价
2013/09/22 职场文书
大学生职业生涯规划范文
2013/12/31 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
前台岗位职责
2015/02/13 职场文书
消防隐患整改通知书
2015/04/22 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
python四种出行路线规划的实现
2021/06/23 Python
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby