匿名函数

一、匿名函数

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)
#让其有名字就没有意义

二、匿名函数的基本格式:lambda *args,**kwargs:"返回值"

# 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>

三、匿名函数结合内置函数

3.1 max与min工作原理

# 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

3.2 map函数

# 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)]

3.3 reduce函数

# 把多个值合并成一个结果

from functools import reduce
print(reduce(lambda x, y: x * y, [3, 5, 2]))    # 30

3.4 sort排序

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']

 

posted on 2020-05-15 23:32  软饭攻城狮  阅读(179)  评论(0编辑  收藏  举报

导航