什么样的函数叫高阶函数:
  条件:1.函数接受函数作为参数
     2.函数的返回值中包含函数 高阶函数之----map函数 map(func, *iterables) --> map object
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
num = [1,2,3,4]
def reduce_test(array):
res = 0
for i in array:
res+=i
return res
print(reduce_test(num))
>>>10-------逻辑写死了,只能完成自增,如果想完成自乘怎么办?
num = [1,2,3,4]
lambda x,y:x*y
def reduce_test(func,array):
res = array.pop(0)
for i in array:
res = func(res,i)
return res
print(reduce_test(lambda x,y:x*y,num))
>>>24
可以进一步优化,指定初始的基数,比如reduce_test(func,array,init=10)指定初始化的init基数是10
num = [1,2,3,4]
lambda x,y:x*y
def reduce_test(func,array,init=None):
if init is None:
res = array.pop(0)
else:
res = init
for i in array:
res = func(res,i)
return res
print(reduce_test(lambda x,y:x*y,num,100))
reduce将完整的序列压缩成一个值!map-reduce就是大数据的概念,将获取的数据加工,然后整合成一个最终结果
from functools import reduce
num = [1,2,3,4]
res = reduce(lambda x,y:x+y,num,100)--->这个直接返回一个值给你,而map,filter是返回一个对象!!!
print(res)
>>>110 小结:
   map:处理序列中的每个元素,得到一个map对象的结果,结果中的每一个元素都和原来的位置一样
   filter:遍历序列中的每个元素,判断元素得到bool值秒如果是True则保留
   reduce:处理一个序列,整合合并操作
												

最新文章

  1. PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.
  2. codevs 1082 线段树练习 3(区间维护)
  3. div居中方法
  4. 《BI项目笔记》创建多维数据集Cube(2)
  5. WPF中的画图
  6. 【WinAPI】Windows Message 枚举常量收集
  7. meta里面的viewport属性
  8. USACO Section 1.2 Name That Number 解题报告
  9. Maven搭建Hadoop开发环境
  10. STS安装
  11. 关于在 IntellIj IDEA中JSP页面 cannot resolve method getParameter(&quot;&quot;)的解决方案
  12. .net core 在网络高并发下提高JSON的处理效率
  13. 文本分类实战(二)—— textCNN 模型
  14. socket FTP-1
  15. 单片机的基本构成、工作原理 LET′S TRY“嵌入式编程”: 1 of 6
  16. Confluence 6 恢复一个空间
  17. mybatis源码解析6---MappedStatement解析
  18. 通过前端控制器源码分析springmvc的执行过程
  19. jquery对象和DOM对象转换
  20. nginx 安装配置和常用命令

热门文章

  1. sed 变量在shell引用
  2. 【转载】 TensorFlow学习——tf.GPUOptions和tf.ConfigProto用法解析
  3. 在条件判断中使用 all() / any()
  4. 一步一步FLASK(一)
  5. noi openjudge 1768:最大子矩阵
  6. Java的集合类之Set接口
  7. fineui 实现下拉框模糊查询
  8. SQL Server 特殊字符及中文汉字的处理
  9. 如何Dockerize您的端到端验收测试
  10. K8s-yaml的使用及命令