匿名函数
有名函数
之前我们讲的函数都是又名函数,它是通过函数名来进行调用的
def f1():
print('from f1')
f1()
f1()
from f1
from f1
匿名函数
匿名函数就是没有名字的函数,只能使用一次
res = (lambda x,y:x+y)(3,1)
print(res)
4
与内置函数联用
匿名函数通常与max()min()sorted()filter()map()
方法联用
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
-
如果我们需要从上面的字典中取出薪资最高人的姓名,我们可以使用max()方法,但max()比较的是key
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
# 方法一/不可行
print(max(salary_dict)) # 这个比较的是key
# 方法二/可行
def func(k):
return salary_dict[k]
print(max(salary_dict, key=func))
# 方法三/一行解决问题
print(max(salary_dict, key=lambda name: salary_dict[name]))
tank
jason
jason
-
取出薪资最低的人的名字,使min()方法
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
print(min(salary_dict, key=lambda name: salary_dict[name]))
sean
-
对薪资进行排序,使用sorted()方法
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
print(sorted(salary_dict,key=lambda name :salary_dict[name],reverse=True))
['jason', 'tank', 'nick', 'sean']
-
map()是对容器元素里的元素进行处理
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做map()方法的结果之一
name_list = ['hades','bonnie','zhuping','yang']
res = map(lambda name:f'{name} handsome' if name == 'hades'else name, name_list)
print(list(res))
['hades handsome', 'bonnie', 'zhuping', 'yang']
-
filter()是对容器元素里的元素进行筛选
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下
name_lis = ['hades handsome', 'bonnie', 'zhuping', 'yang']
res = filter(lambda name:not name.endswith('handsome'), name_lis)
print(list(res))
['bonnie', 'zhuping', 'yang']