文章目录
- 一、匿名函数
- 二、map()函数
- 三、reduce()函数
- 四、filter()函数
- 五、三大函数总结
本篇文章内容有Python中的匿名函数和map()函数、reduce()函数、filter()函数这三大封装函数(遍历处理),以及它们的使用案例。
文末是对这几个函数用法功能的比较。
一、匿名函数
该函数的用法类似于C语言中的宏定义,只是这个不需要定义名字,故叫匿名函数,但它们的作用都是用来提供一个简短的函数。
print(lambda x:x+1)
func1 = lambda x:x+1
func2 = lambda x,y:x*y
print(func1(10))
print(func2(4,130))
name = '鸣人'
func3 = lambda x:x + '——羊村村长'
print(func3(name))
运行结果:
<function at 0x02C07B70>
11
520
鸣人——羊村村长
二、map()函数
- 函数嵌套——把函数当做一个参数传给另外一个函数
def foo(n):
print(n)
def bar(name):
print("my name is %s"%name)
foo(bar('小沈阳'))
运行结果:
my name is 小沈阳
None
- 低级函数封装
num_1 = [1,2,3,4,5]
def map_test(array):
ret = []
for i in array:
ret.append(i*2)
return ret
ret = map_test(num_1)
print(ret)
运行结果:
[2, 4, 6, 8, 10]
- 高级封装函数——最接近map()函数的本质
num_1 = [1,2,3,4,5]
def cut_one(x):
return x-1
def add_one(x):
return x+1
def map_test(func,array):
ret=[]
for i in array:
res=func(i)
ret.append(res)
return ret
print(map_test(add_one,num_1))
print(map_test(cut_one,num_1))
运行结果:
[2, 3, 4, 5, 6]
[0, 1, 2, 3, 4]
- map()函数+匿名函数——终极用法
传入一个函数和一个列表到封装函数中,好处是可以根据需求传入各种定义的函数,将列表中所有的元素做处理
num_1 = [1,2,3,4,5]
res = map(lambda x:x+1,num_1)
print(list(res))
msg='yourself'
print(list(map(lambda x:x.upper(),msg)))
运行结果:
[2, 3, 4, 5, 6]
[‘Y’, ‘O’, ‘U’, ‘R’, ‘S’, ‘E’, ‘L’, ‘F’]
原来,map()函数是做批量处理用的
三、reduce()函数
- 初级reduce()——简单的单函数
num = [1,2,3,4,5,6,100]
def reduce_test(array):
res = 0
for n in array:
res += n
return res
print(reduce_test(num))
运行结果:121
- 进阶reduce()——函数嵌套
num = [1,2,3,4,5,100]
def reduce_test(func,array,init=None):
if init == None:
res = array.pop(0)
else:
res = init
for n in array:
res = func(res,n)
return res
print(reduce_test(lambda x,y:x*y, num, 2))
运行结果:
24000
- reduce()函数——终极reduce
注意:该函数使用前需要从functools库中导入。
即:from functools import reduce
from functools import reduce
num = [1,2,3,4,5,100]
print(reduce(lambda x,y:x*y, num, 2))
运行结果:
24000
很明显,reduce()函数做整合用的。
四、filter()函数
这个函数在我的文章:初学者python笔记(filter()函数完全详解)里已经专门介绍了,这里就不做详细分析,只拿出最后的用法。
people_onepiece=[
{'name':'路飞','age':19},
{'name':'娜美','age':20},
{'name':'山治','age':22},
{'name':'乔巴','age':12},
{'name':'乌索普','age':21}
]
print(list(filter(lambda n:n['age']<=20,people_onepiece)))
运行结果:
[{‘name’: ‘路飞’, ‘age’: 19}, {‘name’: ‘娜美’, ‘age’: 20}, {‘name’: ‘乔巴’, ‘age’: 12}]
可以看出,filter()函数是做筛选用的
五、三大函数总结
map()函数,filter()函数,reduce()三大批量处理函数总结:
map函数是将一个列表中所有的元素都处理了一遍(最终返回的还是一个完整列表,位置和顺序都不变)
filter函数是将一个列表中所有的元素筛选了一遍,判断每个元素得到的布尔值(最终返回的是被筛选过的元素组成的一个列表)
reduce函数是把一个完整的列表都整合出另一个数据,或累加结果,或累乘结果(最终返回的是一个元素)
map函数 | 每个元素都会变 |
---|
| |
filter函数 | 保留符合条件的元素 |
| |
reduce函数 | 整合出新元素 |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)