匿名函数、高阶函数、map函数、filter函数、reduce函数
1.匿名函数
例如: lambda x: x+1
此为匿名函数 x为形参,x+1为函数表达式 (此处表达式逻辑不能过于复杂,条件语句等不能使用;可以定义多个形参 如 lambda x,y,z:x+y+z;)
匿名函数也可返回多个值,但需要加括号 如 lambda x,y,z: (x+1,y+1,z+1)
(1)匿名函数的调用
func = lambda x:x+1 赋名
a=func(10) 调用
print(a) 打印
运行结果:
11
2.高阶函数 : 函数接受的参数是一个函数名 或者 返回值中包含函数
def bar():
print('from bar')
def foo(): foo() 为高阶函数
print('from foo')
return bar() 此处运行bar() 并得到其返回值,并返回
print(foo())
运行结果:
from foo
from bar
None 因为bar()没有返回值,所以此处为None
3.map函数 map(x,y) 两个形参,第一个为处理方法,第二个为一个可迭代对象。map函数将可迭代对象中的每一个值运for循环遍历,并把每个值交给前边形参所提供的处理方法进行处理并返回值
最终得到的是与原来相似的处理后的对象(元素个数及位置与原来的一样)
num_l = [1,2,10,5,3,7]
def map_test(func,array):
ret=[]
for i in array:
res=func(i)
ret.append(res)
return ret
print(map_test(lambda x:x+1,num_l)) 传入一个匿名函数(也可以自己再定义一个函数),传入一个处理对象
print('内置函数map,处理结果:',map(lambda x:x+1,num_l))
运行结果:
[2, 3, 11, 6, 4, 8]
内置函数map,处理结果: <map object at 0x00000272B81276D8> 有此处可以得知,map函数与map_test()作用一样,但写起来更为简便,但其得到的结果为一个内存地址(可迭代对象),可通过
print(list(map(lambda x:x+1,num_l))) 来得到与 map_test() 相同过的效果
4.filter函数 filter(x,y) 第一个形参为函数,第二个形参为可迭代对象,filter函数将第二个形参中的值遍历给第一个形参传入的函数处理,函数返回布尔值 True 或者False,并保留True的值
movie_people = ['alex_sb','qupeiqi_sb','linhaifeng','yuanhao_sb']
def filter_test(func,array):
tet=[]
for i in array:
if not func(i):
tet.append(i)
return tet
print(filter_test(lambda n :n.endswith('sb'),movie_people))
print(filter(lambda n:not n.endswith('sb'),movie_people))
print(list(filter(lambda n:not n.endswith('sb'),movie_people)))
运行结果:
['linhaifeng']
<filter object at 0x00000283CFE07828> 可知,filter()函数和自定义的filter_test()函数作用相同,其返回值也是内存地址。
['linhaifeng']
5.reduce函数 reduce(x,y,z=None) 第一个形参传入函数,第二个形参传入处理的对象,第三个默认为None。将第二个形参中的值遍历传入函数进处理(累加或累乘等等),同时可加入第三个值
即z 一并计算,最终得到的是一个值
from functools import reduce 从模块中引入reduce num_l = [1,2,3,100] def reduce_test(func,array,init=None): if init is None: res = array.pop(0) else: res=init for num in array: res = func(res,num) return res print(reduce_test(lambda x,y:x*y,num_l,100)) print(reduce(lambda x,y:x*y,num_l,100))
运行结果:
60000
60000 可知 reduce函数与自定义的reduce_test()函数作用相同,返回的是一个值