函数式编程中的map函数,filter函数,reduce函数

lambda x:x+1  第一个x表示形参,第二个表示函数执行的运算

自定义map函数的实现

>>> def map(func,nums):
	ret = []
	for i in nums:
		res = func(i)
		ret.append(res)
	return ret

>>> map(lambda(x:x+2),[1,3,5,7,9])
SyntaxError: invalid syntax
>>> map(lambda x:x+2,[1,2,3,4,5])
[3, 4, 5, 6, 7]
>>> 

内置函数map返回的是一个可迭代对象(迭代器) 函数式编程中的

>>> list(map(lambda x:x.upper(),name))
['D', 'S', 'A', 'K', 'J', 'D', 'A', 'S', 'K', 'D', 'H', 'K', 'A']
>>> 
在python2中map处理的结果就是一个

filter函数与map函数的逻辑类似,就是在匿名函数处理时有差异,filter函数的第一个参数是匿名函数返回值是一个布尔类型的值,第二个参数是可迭代的对象,举列filter函数实现的过程。

array =['liudapang','wangjialin','liufeng','wangkeqin']
def filter_test(func,array):
    ret = []
    for i in array:
        if func(i):
            ret.append(i)
    return ret
print(list(filter_test(lambda x:x.startswith("liu"),array)))
['liudapang', 'liufeng']

在python3中reduce函数集成在functools模块中,在使用前需要先导入,from functools import reduce

reduce函数是将序列中所有数/文字通过运算合并为一个值,得出最终的结果,先自定义出reduce测试函数,reduce_test

比方说这里有一个列表,需要把其中所有的值相乘,则可以使用reduce函数

def reduce_test(func,nums,init=None):
    if init==None:
        ret = nums.pop(0)
    else:
        ret = init
    for i in nums:
        ret = func(ret,i)
    return ret
res = reduce_test(lambda x,y:x*y,nums)
print(res)

输出结果:120

在python内置的reduce用法:

>>> from functools import reduce
>>> nums = [1,2,3,100]
>>> res = reduce(lambda x,y:x*y,nums,10)
>>> print(res)
... 
6000

#第三个值为初始值,默认为None,通过赋值可以参与整体运算

小结:

#map()函数处理序列中的每个元素,得到的结果是一个迭代器,该迭代器的元素个数和位置与传入的列表相同

#filter函数遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来,返回的结果也是一个迭代器

#reduce函数是处理一个序列,然后把序列进行合并操作

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值