匿名函数是定义简单函数的一种方式,定义简单,由关键字lambda,参数,冒号,返回值四部分构成。返回值必须能表明与参数的关系,参数可以省略。不有多余代码,只能用于定义一句话函数。
如果一个函数的参数为函数引用,则此参数函数有名曰:回调函数。函数的代码块没有这个之前最多通过传某些类型参数让待处理的变量是动态的,而现在有了它参数类型进一步扩展,让代码块中对变量的处理也变为动态的。
以下代码包括通过函数回调实现仿版reduce ,filter, map函数的过程。
#匿名函数及其应用(作回调函数传参)
f=lambda x:x+1#返回函数引用给f
print(f(4))#函数引用配(),在传入参数可以调用函数
def calc(fun,li=[]):#仿map
res=[]
for i in li:
print(i,fun(i))
res.append(fun(i))
return res
list1=[1,2,3,4,5]
print("first",calc(f,list1))
print("second",calc(lambda x:x+1,list1))
print(list(map(f,list1)))
print("_____________________________________________")
f1=lambda x:not x.endswith("sb")
def calc1(fun,v=[]):#仿filter
res=[]
for i in v:
if fun(i):
res.append(i)
return res
print("first",list(calc1(f1,["is","whsb","slisb","dfsb"])))
print("second",list(filter(f1,["is","whsb","slisb","dfsb"])))
print("_____________________________________________")
f2=lambda x,y:x*y
def calc2(fun,v=[],initnum=None):#仿reduce
num=v.pop(0)
for i in v:
num=fun(num,i)
if initnum!= None:
num*=initnum
return num
print(calc2(f2,[2,3,4],10))
from functools import reduce
print(reduce(f2,[2,3,4],10))