点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作为一种抽象程度极高的编程范式,函数式编程的最大特点就是允许函数本身作为一个参数传入另一个函数,并且也可以返回一个函数。本文介绍Python函数式编程的两个极为重要的函数:map和reduce。在介绍这两个函数前,先简单说下什么是高阶函数。

高阶函数

我们求平方根函数的例子来解释什么是高阶函数。

>>> math.sqrt(16)
4.0
>>> math.sqrt
<built-in function math.sqrt>

由上可见,math.sqrt(16)是函数调用,而math.sqrt则是函数本身。Python允许将函数本身赋值给一个变量,所以我们可以看到如下效果:

>>> f = math.sqrt
>>> f
<built-in function math.sqrt>

于是我们可以得到结论:Python中变量可以指向函数。

    变量可以指向函数,函数的参数可以接受变量,那一个函数就可以接受另一个函数作为参数,这样的函数我们称之为高阶函数

def add(x,y,f):return f(x)+f(y)
>>> add(16,9,math.sqrt)
7.0

map函数

作为Python函数式编程的代表,你可以将map函数理解为数学上的映射,map函数接受两个参数,一个是函数,另一个则是函数所作用的可迭代对象。map将函数依次作用在可迭代对象的每一个元素上,并将结果作为一个迭代器返回。且看实例:

例如我们有一个函数f(x)=x3 ,有一个list L=[1,2,3,4,5],我们就可以用map函数来将函数作用到这个可迭代对象list上:

>>> def f(x):
...    return x*x*x
...
>>> L = [1, 2, 3, 4, 5]
>>> L2 = map(f, L)
>>> list(L2)
[1, 8, 27, 64, 125]

map函数的好处是可以将运算规则抽象化,对于简单函数我们也许不能体会到方便之处,但对于复杂函数,map的便利性是显而易见的。例如将一个list里面所有数字转化为字符串只需要一行代码:

>>> list(map(str, [1, 2, 3]))
['1', '2', '3']

reduce函数

如果说map函数理解为映射的话,那reduce函数则可以理解为归约或者迭代。reduce函数也只接受两个参数,一个是归约函数,一个是函数所作用的可迭代对象。reduce将一个函数f作用在一个list上的迭代思想如下:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

例如我们想要将一个序列[1,2,3,4,5]变成整数12345,用reduce函数可写为:

>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 2, 3, 4, 5])
12345

这里仅简单的对map和reduce函数做个简单笔记,内容不多,但关键在于掌握其函数式编程的思想精髓。借助于map/reduce的函数式编程思想,Hadoop的大数据处理工具MapReduce已经将该思想作为一种编程模型,进行大规模数据集的并行运算了。等小编将来学习了Hadoop,再来仔细说说MapReduce吧。

好消息!

小白学视觉知识星球

开始面向外开放啦

Python函数式编程:map/reduce相关推荐

  1. Python函数式编程-map/reduce

    1.map map()传入的第一个参数是f,即函数对象本身. map()函数接收两个参数,一个是函数,一个是Interable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterat ...

  2. Python函数式编程——map()、reduce()

    提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年A ...

  3. Python 函数式编程Map、Reduce

    在函数式语言里,map表示对一个列表(List)中的每个元素做计算,reduce表示对一个列表中的每个元素做迭代计算.它们具体的计算是通过传入的函数来实现的,map和reduce提供的是计算的框架. ...

  4. 函数式编程Map()Reduce()

    1.forEach():每个元素都调用指定函数,可传三个参数:数组元素丶元素索引丶数组本身丶var a = [1, 2, 3, 4, 5, 6, 7, 8]; a.forEach(function(v ...

  5. 函数式编程语言python-10分钟学会python函数式编程

    原标题:10分钟学会python函数式编程 在这篇文章里,你将学会什么是函数范式以及如何使用Python进行函数式编程.你也将了解列表推导和其它形式的推导. 函数范式 在命令式范式中,通过为计算机提供 ...

  6. python函数式编程读取数据-python学习笔记9:函数式编程

    函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...

  7. python编写函数_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  8. Python函数式编程简介(一)高阶函数

    本文概括介绍Python函数式编程的一些概念及用法,详细请参考: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df ...

  9. python采用函数编程模式_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

最新文章

  1. Golang向Templates 插入对象的值
  2. LockSupport 使用
  3. python爬虫完整实例-python爬虫实战之爬取京东商城实例教程
  4. Kubernetes网络方案Flannel的学习笔记
  5. vue2.0 子组件和父组件之间的传值
  6. 揭秘双11丝滑般剁手之路背后的网络监控技术
  7. SAP Fiori应用Footerbar区域按钮的高亮显示逻辑
  8. 堆的定义与操作(C语言)
  9. jooq中record_在Spring中使用jOOQ:CRUD
  10. FreeMarker的优点和缺点
  11. python bytes 改值_python3 bytes 和 string转换
  12. 禅道PMS兼容redmine用户认证接口
  13. MySQL-第二篇SQL语句基础(1)语句分类及DDL语句
  14. xmind 8 pro中文版下载
  15. 2017博鳌亚洲青年论坛(香港)顺利召开 中国发展人工智能优势在哪?
  16. 抗议浪潮不断,峰会笑声阵阵
  17. vue 视频播放插件VideoPlayer
  18. 微博报错:Ip Limit, request ip is not contained in safety ip error_code:10004/2/status
  19. ICME2021:基于机器视觉的RD模型
  20. STM32 使用SYN6288语音模块

热门文章

  1. 反应性磷脂PEG试剂DSPE-PEG-amine|CAS:474922-26-4|DSPE-PEG-NH2
  2. js调用扫描仪(Web Twain Scan)-兼容Chrome、Edge、360、Firefox、IE、钉钉、企业微信等
  3. 单片机差分升级算法(STM32,M0,M3,M4等芯片都适用)
  4. 《HCNA网络技术学习指南》-命令版
  5. Java中split方法详细讲解
  6. 那个业务大拿死在了这个地方
  7. 2017电影经典语句
  8. ArcGIS Server SOI的调试与触发
  9. java毕业设计汽车商城系统mybatis+源码+调试部署+系统+数据库+lw
  10. 【学习日志】学习总结