什么样的函数叫高阶函数:
  条件: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:处理一个序列,整合合并操作
												

高阶函数-map/filter/reduce的更多相关文章

  1. 高阶函数map(),filter(),reduce()

    接受函数作为参数,或者把函数作为结果返回的函数是高阶函数,官方叫做 Higher-order functions. map()和filter()是内置函数.在python3中,reduce()已不再是 ...

  2. 高阶函数map,filter,reduce的用法

    1.filter filter函数的主要用途是对数组元素进行过滤,并返回一个符合条件的元素的数组 let nums = [10,20,30,111,222,333] 选出nums中小于100的数: l ...

  3. Python高阶函数map、reduce、filter、sorted的应用

    #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...

  4. python的高阶函数(map,filter,sorted,reduce)

    高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...

  5. 数组的高阶方法map filter reduce的使用

    数组中常用的高阶方法: foreach    map    filter    reduce    some    every 在这些方法中都是对数组中每一个元素进行遍历操作,只有foreach是没有 ...

  6. js高阶函数map和reduce

    map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScr ...

  7. python之高阶函数--map()和reduce()

    以下为学习笔记:来自廖雪峰的官方网站 1.高阶函数:简单来说是一个函数里面嵌入另一个函数 2.python内建的了map()和reduce()函数 map()函数接收两参数,一个是函数,一个是Iter ...

  8. python学习笔记1 -- 函数式编程之高阶函数 map 和reduce

    我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def  fw(参数)这种方式定义一个函数 python有很多的内置函 ...

  9. JS高阶函数--------map、reduce、filter

    一.filter filter用于对数组进行过滤.它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 注意: filter() 不会对空数组进行检测. 注意: filter() ...

随机推荐

  1. linux安装nvm和nodejs

    下载nvm包: [root@centos ~]# wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install ...

  2. 没有可用的软件包 xxx,但是它被其它的软件包引用了

    在linux下apt安装软件,弹出这个错. 解决,更新下资源: sudo apt-get update

  3. fail2ban的功能和特性(实测)

    fail2ban的功能和特性 https://fedoraproject.org/wiki/Fail2ban_with_FirewallD 1.支持大量服务.如sshd,apache,qmail,pr ...

  4. 前端与算法 leetcode 27.移除元素

    目录 # 前端与算法 leetcode 27.移除元素 题目描述 概要 提示 解析 算法 @(目录) # 前端与算法 leetcode 27.移除元素 题目描述 27.移除元素 概要 题目本身其实挺简 ...

  5. [Docker] - 不同容器之间相互访问的实现方式(例如:Client 访问 DB)

    部署了两个独立的容器: Container #1 - Web ClientContainer #2 - SQL Server 不同容器间如何互访? 无法从 Container #1 访问到 Conta ...

  6. logback--日志在windows上可以打印,在linux上不能打印的问题

    解决问题方法: 本人遇到的问题,属于jar包冲突问题.本人加入的jar包如下: slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar logback-core-1.0 ...

  7. flask---快速使用

    初识falsk django是大而全面的框架,flask是个轻量级的框架. flask快速开发网站 flask可以使用很少的代码就可以直接完成一个项目(6,7行代码),如下: from flask i ...

  8. 20.Python略有小成(面向对象Ⅱ)

    Python(面向对象Ⅱ) 一.类的空间问题 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,s ...

  9. html 打开新页面

    设置 target 页面 这样会点击一次就产生一个页面 页面 填任意名称,多个点击只产生于一个页面

  10. STM32 系统滴答计时器

    ;//us与系统滴答的被乘数 ;//ms与系统滴答的被乘数 ;//系统运行秒数 /** * @description:系统滴答计时系统初始化 * @param 无 * @retval 无 */ voi ...