匿名函数
一、匿名函数
1. 匿名函数没有函数名
2. 匿名函数的关键字采用lambda
3. 关键字: lambda与标识函数体功能 :之间一定是参数,所以省略()
4. 匿名还没有函数体,只有返回值,所以函数体和返回值的return关键字省略了lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字 func=lambda x,y,z=1:x+y+z func(1,2,3) #让其有名字就没有意义
# 1.参数的使用和有名函数一样,六种形参都支持 # 2.返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象 错误示范: a = lambda *args,**kwargs: '返回值1','返回值2' print(a) # (<function <lambda> at 0x0000024B27DB9950>, '返回值2') 正确示范: a = lambda *args,**kwargs: ('返回值1','返回值2' ) print(a) # <function <lambda> at 0x000001E8B1A099D8>
# 1. max内部会遍历iter(可迭代对象),将遍历结果一一传给lambda的参数x # 2. 依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值 # 3. 对外返回最大的遍历值 dic = { 'wangyong': (1, 88888), 'wanglulu': (2, 66666), 'tom': (3, 77777), } print(max(dic,key = lambda k:k)) # 求名字最大,相同取第一个 wangyong print(max(dic,key = lambda k: dic[k][0] )) # 求员工编号最大 tom print(max(dic,key = lambda k: dic[k][1] )) # 求薪资最大 wangyong
# map函数:把一个列表按照我们自定义的映射规则映射成一个新的列表 res = map(lambda k: k * 2, [3, 1, 2]) # 将遍历结果映射成任意类型 print(list(res)) # [6, 2, 4] res = map(lambda k: k + '123', ['wangyong', 'qwer']) print(list(res)) # ['wangyong123', 'qwer123'] dic = { 'wangyong': 3, 'wanglulu': 5 } res = map(lambda k: (k, dic[k]), dic) print(list(res)) # [('wangyong', 3), ('wanglulu', 5)]
# 把多个值合并成一个结果 from functools import reduce print(reduce(lambda x, y: x * y, [3, 5, 2])) # 30
dic = { 'wangyong': (1, 88888), 'wanglulu': (2, 66666), 'tom': (3, 77777), } res = sorted(dic,key=lambda k: dic[k][1], reverse=True) print(res) # ['wangyong', 'tom', 'wanglulu']