78匿名函数
一、有名函数
我们之前定义的函数都是有名函数,它是基于函数名使用的。
def func(): print('from func') func() func() func() print(func) #输出: from func from func from func <function func at 0x0000026B60E47048>
二、匿名函数
匿名函数。他没有绑定名字,使用一次即被收回,加括号即可以运行。
print(lambda x,y:x+y) #输出: <function <lambda> at 0x0000027D6A837048>
res = (lambda x,y:x+y)(1,2) print(res) #输出: 3
三、与内置函数联用
匿名函数通常与max(),sorted(),filter(),sorted()方法联用。
- 如果我们想从上述字典中取出最薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的ley。
- 首先将可迭代对象变成迭代器对象。
- res=next(迭代器对象),将res当做参数传给key指定的函数,然后该函数的返回值当作判断依据。
salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000 } print(f"max(salary_dict): {max(salary_dict)}") def func(k): return salary_dict[k] print(f"max(salary_dict, key=func()): {max(salary_dict, key=func)}") print(max(salary_dict, key=lambda name: salary_dict[name])) #输出: max(salary_dict): tank max(salary_dict, key=func()): jason jason
如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。
sorted()工作原理:
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当作判断依据。
lis = [1,3,2,5,8,6] sorted(lis) print(lis) print(sorted(lis,reverse=True)) #输出: [1, 3, 2, 5, 8, 6] [8, 6, 5, 3, 2, 1]
salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000 } print(sorted(salary_dict, key=lambda name: salary_dict[name])) #输出: ['sean', 'nick', 'tank', 'jason']
如果我们想对一个列表中的某一个人民做处理,可以使用map()方法。
map()工作原理。
- 首先将可迭代对象变成迭代器
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。
name_list = ['jason','tank','sean'] res = map(lambda name:f"{name} sb",name_list) print(f"list(res):{list(res)}") #输出: list(res):['jason sb', 'tank sb', 'sean sb']
如果我们想要筛选除名字中含有‘sb'的名字,我们可以使用filter()方法。
filter()工作原理:
- 首先可将迭代对象变成迭代器对象
- res=next(迭代器对象),将res当阐述传给第一个参数指定的函数,然后filter()会判断函数的返回值的真假,如果为真则留下。
name_list=['nick','jason sb','tank sb','sean sb'] filter_res = filter(lambda name:name.endswith('sb'),name_list) print(list(filter_res)) #输出: ['jason sb', 'tank sb', 'sean sb']
来源:https://www.cnblogs.com/SkyOceanchen/p/11354372.html