一、定义:相较于有名函数,匿名函数没有函数名,所以无法通过名字调用,用关键字lambda定义。
def add(a, b): return a + b # 下方的匿名函数即实现了上方的有名函数add的功能,并且会自动返回值 lambda a, b: a + b # 匿名函数因为没有被名字引用,若不立刻执行,或赋值给一个名字,就会在造出的同时被系统回收
二、调用场景:
1、临时调用:直接调用获得其返回值。
2、配合其他函数使用:本质也是临时调用,需要将其返回值用于函数内。
3、匿名函数与内置函数的配合使用:
ddd = {'a': 2, 'b': 4, 'c': 1, 'd': 3 } res1 = max(ddd, key=lambda k: ddd[k]) # max()会把放入的可迭代对象进行遍历,返回最大的元素, # 可以用key声明比较标准,key会把每次遍历的值作为后方表达式的参数得到结果 print(res1) # 结果为 b res2 = min(ddd, key=lambda k: ddd[k]) print(res2) # min()的功能与max()正好相反,返回最小的元素,结果为 c res3 = sorted(ddd, key=lambda k: ddd[k]) print(res3) # sorted()会把放入的可迭代对象进行遍历并升序排序为列表,返回排序后的结果 ['c', 'a', 'd', 'b'] res4 = sorted(ddd, key=lambda k: ddd[k], reverse=True) print(res4) # 可以用reverse声明为降序,结果为 ['b', 'd', 'a', 'c'] res5 = map(lambda x: x * 3, ddd) print(res5) # map()会把放入的可迭代对象进行遍历,对每次的元素按照左边的表达式计算结果, # 返回出可迭代所有结果的生成器 print(next(res5)) # 结果为 aaa res6 = filter(lambda x: x in ['b', 'c'], ddd) print(res6) # filter()会把放入的可迭代对象进行遍历,对每次的元素判断是否符合左侧条件 # 把所有符合条件的值作为返回出的生成器的可取值 print(next(res6)) # 结果为 b print(next(res6)) # 结果为 c from functools import reduce res7 = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]) # reduce()会把放入的可迭代对象进行遍历,对每次的元素按照左侧表达式叠加计算,遍历完返回最终结果 print(res7) # 结果为 15