一、定义:相较于有名函数,匿名函数没有函数名,所以无法通过名字调用,用关键字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

 

posted on 2020-01-03 19:01  焚音留香  阅读(221)  评论(0编辑  收藏  举报