map函数与高阶函数(初)+filter函数+reduce简述

一个函数调用函数的例子
如果频繁更换需求,可以把常用的需求写成函数之后来调用

num1 = [1,2,3,4]
def add_one(x):#先写一个自增加一的函数
	return x+1
def map_test(func,array):
	ret = []
	for i in array:
		res = func(i)#让传入的函数对i进行操作,然后将它的值赋值给res
		ret.append(res)#使res增加到空列表
		#或者写成ret.append(func(i))
	return ret#返回列表的值
print(map_test(add_one,num1))#传入函数和需要的数字
print(map_test(lambda x:x+1,num1))

上一章内容讲了匿名函数,如果用匿名函数写的话可以在print后面写成

print(map_test(lambda x:x-1,num1))
print(map_test(lambda x:x**2,num1))
#等等等等

这个例子就是一个高阶函数,如果更换了传入的函数,就可以更换方法
高阶函数:
1、函数接收的参数是一个函数名
2、返回值中包含函数
这两条合到一起就是函数式变成的一个概念,高阶函数
只要满足两个条件之一,就是高阶函数

总结就是,上面的函数其实是写了一个内置的map这个函数
总体用法就和上面一样需要两个参数,第一个“数理方法”,第二个:可迭代对象
这个位置不一定要写lambda,处理成list就可以了
直接可以写成:print(list(map(函数,对象)))

print(list(map(lambda x:x**2,[2,3,4])))
#而且不光是数字,字母也可以
msg = 'yibole'
print(list(map(lambda x:x.upper(),msg)))

同理这里还有filter过滤,也是这个道理,

person_1 = ['goodchild1','goodchild2','goodchild3','yibole']
ret = []
for i in person_1:
    if not i.startswith('good'):
        ret.append(i)
print(ret)
#和上面一样更换方法就是lambda,简写就是
filter(lambda x:x.startwith('good'),person_1)))

函数式编程实践起来很简单,但是可读性很差

reduce:

from functools import reduce
num1 = [1,2,3,100]
print(reduce(lambda x,y:x*y,num1,10))

需要在列表的最后传入一个变量,这个变量可以控制lambda函数最终的计算方式,比如说上面xy就是(123100),但是在num1后面加的10这个变量就是(11023100)
总结就是:
#map的作用是依次处理列表中的数据,最终得到的还是这个“列表(迭代器形式)”,只是每一个元素被处理过了
#filter:列表当中所有的值筛选一遍,最后得出一个“列表”(迭代器形式)出来
#reduce:可以把一个完整的列表压缩成一个值
类似于大数据的mapreduce
map、filter、reduce不限制于仅仅处理数字,他处理的后面是序列,就相当于是一个for循环,依次遍历

people = [
    {'name':'yibole','age' : 18},
    {'name':'wangbin','age' : 1000},
    {'name':'zhguo','age' : 1000},
    {'name':'baozi','age' : 1000}
]
print(list(filter(lambda p:p['age']<19,people)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值