函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

高阶函数

定义:一个函数就可以接收另一函数作为参数,这种函数就称之为高阶函数。

map/reduce

Python内建了map()和reduce()函数。
1.map()函数
map()函数接受两个参数,一个是函数,一个是Iterable(可迭代对象),map将传入的函数依次作用到序列的每一个元素上,然后将结果作为新的Iterator返回。

def f(x):return x*xr = map(f,[1,2,3,4,5,6]);
list(r)
//由于结果是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。list(map,(str,[1,2,3,4,5,6]))
//['1','2','3','4','5','6']

2.reduce()函数
作用在一个序列上[x1,x2,x3,...],这个函数必须接受两个参数,reduce将结果继续和序列的下一个元素做累积计算。

reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4);
from functools import reduce
def add(x,y):return x+y
reduce(add,[1,3,5,7,9])
//25

当然要求和的话,也可以直接用python内建函数sum(),没有必要动用reduce。
比如要将序列[1,3,5,7,9]变换成整数13579,reduce可以派上用场

from functools import reduce
def fn(x,y):return x*10 + yreduce(fn,[1,3,5,7,9])
//13579

还可以结合使用map和reduce方法将一个数字字符串变成一个数字。

from functools import reducedef str2int(s):def fn(x,y):return x*10 + ydef char2num(s):return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]return reduce(fn,map(char2num,s))

filter()函数

主要是用来过滤序列。
和map()相似,filter()也接收一个函数和一个序列。和map不同的是,filter会把函数作用于每个元素,然后根据返回值是true还是false来决定保留还是丢弃该元素。
注意到filter()函数返回的也是一个Iterator,也就是一个惰性序列,所以也要用list()函数获得所有结果并返回list。

sorted()函数

1.python内置的sorted函数就可以对list进行排序。

sorted([1,5,6,78,0])

还可以实现自定义排序

sorted([36,-5,45,12],key = abs)
//-5,12,36,45

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。

2.还可以对字符串进行排序

sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']

默认下,对字符串排序,是按照ASCII的大小比较的,当然也可以像上面一样自定义排序方法,在后面加上一个key函数。

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

3.要进行反向排序的话,就要传入第三个参数reverse=True

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

转载于:https://www.cnblogs.com/sminocence/p/7899785.html

python的高阶函数相关推荐

  1. python list大小_4个python常用高阶函数的使用方法

    1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...

  2. Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)

    Python之高阶函数(abs.map.reduce.filter.lambda匿名函数) 什么是内置高阶函数 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返 ...

  3. Python:高阶函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

  5. python四大高阶函数求导_4个python常用高阶函数的使用方法

    1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...

  6. Python编程 高阶函数使用技巧

    在坚持的初期,坚持本身比坚持的事情更重要.也许,生活的意义并不在于实现了怎样伟大的梦想,而是在于自己全身心地投入,让每一天都成为梦想的一部分.只要是能确定带给自己价值感的事情,去做就好.时间在流逝,每 ...

  7. python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)

    文章目录 高阶函数 函数传参 返回函数(闭包) 匿名函数lambda 高阶函数 定义: 至少满足下列一个条件: 接受一个或多个函数作为输入 输出一个函数 python里的高阶函数有 filter.ma ...

  8. python使用高阶函数实现_18.python高阶函数

    什么是高阶函数:一个函数可以作为参数传给另外一个函数(一个函数可以用来接收另一个函数作为参数),或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数.函数的形参位 ...

  9. python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...

    python有很多内置函数,内置函数封装了很多功能,让我们用起来很方便,小猿圈针对高阶函数有详细的讲解视频,朋友们可以去看看,小编学后总结了一下,下面说一下lambda.map和reduce高阶函数的 ...

最新文章

  1. 深入理解 x86/x64 的中断体系--IVT VS IDT
  2. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用
  3. 递归回溯最简单易懂的小例子
  4. iphonex黑屏开不了机_手机突然黑屏开不了机充电没反应怎么办?别急,这样就可以解决...
  5. android功耗iphone,是心目中的安卓小屏旗舰吗?iPhone 8尺寸大小,4000mAh电池容量...
  6. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
  7. Android面试,View绘制流程以及invalidate()等相关方法分析
  8. 《PHP、MySQL和Apache入门经典(第5版)》一2.7 基本安全规则
  9. SQL Server中数据透视表的Python脚本
  10. 谁说导航一定要用地图?谷歌DeepMind的强化学习模型靠街景认路
  11. java日期处理简单封装
  12. 元音字母A的发音规则
  13. 《人月神话(The Mythical Man-Month)》1 看清问题的本质:如果我们想解决问题,就必须试图先去理解它...
  14. U盘不能分区,不能格式化,解决方案
  15. idea Lombok插件下载
  16. 如何使用LaTeX完成一篇论文的基本排版
  17. 修改域名指向的服务器,让域名指向服务器
  18. 环境光传感器--OPT3001,硬件开发与程序设计
  19. sklearn学习之Spectral Clustering
  20. android开启照相功能,Android--启动拍照功能并返回结果

热门文章

  1. 和我一起读Java8 LinkedList源码
  2. Python的Wiki
  3. 想和人脑一样智能? IBM 的芯片级模仿才是关键
  4. 子网掩码、掩码长度关系
  5. [.NET 三层架构(ADO.NET)+Web Service+多语言]WinForm三层架构重新实现TaskVision,外加WebService提供数据和多语言...
  6. 【Project3】【web.xml分析】
  7. 关于Breeze's MapHack 2.0的一些重要说明
  8. YaCy开源搜索引擎的热门技巧
  9. Lovesource博士:或者我是如何学会不再担心和热爱开放的
  10. linux管理员权限命令_每个系统管理员应该知道的20个Linux命令