什么样的函数叫高阶函数:map(func, *iterables) --> map object
  条件:1.函数接受函数作为参数
     2.函数的返回值中包含函数
num_l = [1,2,3,4,5,6]
b = map(lambda x:x**2,num_l)
print(b)
for i in b:
  print(i)
>>> <map object at 0x0000023023782358> #返回map对象,是迭代器
  1
  4
  9
  16
  25
  36
num_l = [1,2,3,4,5,6]
def add_one(x):#也可以将lambda函数作为参数,等价于lambda x:x+1
return x+1
def reduce_one(x):
return x-1
def map_number(func,array):#传函数作为参数,将处理的功能封装
ret = []
for i in num_l:
res = func(i) #add_one或者reduce_one
ret.append(res)
return ret print(map_number(add_one,num_l))#map_number((lambda x:x+1),num_l) >>>[2, 3, 4, 5, 6, 7] 上述的代码其实就是map()函数!无意中完成了map内置函数!等价map((lambda x:x+1),num_l) 高阶函数之-filter filter(function or None, iterable) --> filter object
  
例子:
all_starts = ['kobe','kg','ai','jorden','jamse','sb_zhouqi','sb_guoailun']
def filter_test(array):
ret = []
for i in array:
if not i.startswith('sb'):
ret.append(i)
return ret
res = filter_test(all_starts)
print(res)
>>>['kobe', 'kg', 'ai', 'jorden', 'jamse']
上面的例子可以看出,处理的逻辑还是通过for循环来实现的,但是如果处理的不是以sb开头怎么办?处理以XX为中间的怎么办?
所以此时处理的逻辑可以单独写成函数,就会很好用,如同上面的map函数,你给我处理逻辑的函数和要处理的可迭代对象,我就给你处理!
唯一的不同是此时的逻辑是判断bool,通过True或者False来过滤,除去函数逻辑中的元素,此时filter函数应运而生!而filter是保留
满足函数逻辑的元素!
all_starts = ['kobe','kg','ai','jorden','jamse','sb_zhouqi_sb','sb_guoailun_sb']
def sb_show(n):
return n.endswith('sb')
def filter_test(func,array):
ret = []
for i in array:
if not func(i):
ret.append(i)
return ret res = filter_test(sb_show,all_starts)
print(res)
无意中把filter函数构造出来了!说白了就是将可迭代对象array中的每个元素拿出来给前面的函数处理,处理结果是true的保留
处理结果是False的舍弃。
终极版本:ret = filter(lambda x:not x.startswith('sb'),array)
     print(list(ret))
   >>>['kobe', 'kg', 'ai', 'jorden', 'jamse'] 高阶函数之---reduce
from functools import reduce

最新文章

  1. Unity学习疑问记录之协程
  2. 用Groovy构建java脚本
  3. 从零开始学习Node.js例子八 使用SQLite3和MongoDB
  4. Python编写邮件群发(qq邮箱)
  5. POJ3525 半平面交
  6. Android Handler处理机制 ( 一 )(图+源码分析)——Handler,Message,Looper,MessageQueue
  7. Permissions 0664 for &#39;/home/root/.ssh/id_rsa&#39; are too open.
  8. CSS笔记(五)字体
  9. [转]Webservice client timeout
  10. Android Wear预览版——尝鲜
  11. MVC验证13-2个属性至少输入一项
  12. BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]
  13. Maven常用命令及在Eclipse中的应用
  14. FFmpeg-音频和视频应用程序的瑞士军刀
  15. DDCTF 2018线上赛writeup
  16. C语言+嵌入式SQL+DB2开发经验总结
  17. &lt;c:forEach&gt;详解
  18. hadoop商业版本的选择介绍
  19. STL容器基本功能与分类
  20. Spark(三)RDD与广播变量、累加器

热门文章

  1. Eclipse4.2juno安装git
  2. Python 精选文章
  3. 梳理数据库(MySQL)的主要知识点
  4. 【SpringBoot】SpringBoot配置文件及YAML简介(三)
  5. light4j一个轻量级的低延时、高吞吐量、内存占用量小的API平台
  6. EasyNVR摄像机网页无插件直播方案H5前端构建之:接口调用获取实时信息
  7. WinSCP-windows与Linux之间文件传输
  8. vim、vi 快捷键
  9. Vue 搭建项目
  10. GraphQL&amp;DSL&amp;API网关