函数进阶-09匿名函数
一丶有名函数
我们之前定的函数都是有名函数,它是基于函数名使用。
def func():
print('from func')
func()
func()
func()
print(func)
from func from func from func <function func at 0x10518b268>
二丶匿名函数
匿名函数,他没有绑定名字,使用一次即被收回,加括号既可以运行。
lambda x, y: x+y
<function __main__.<lambda>(x, y)>
res = (lambda x, y: x+y)(1, 2)
print(res)
3
三丶与内置函数联用
匿名函数通常与max()、sorted()、filter()、sorted()方法联用。
salary_dict = {
'fujiachen': 3000,
'nash': 100000,
'jinyi': 5000,
'langyigang': 2000
}
1.如果我们想从上述字典中取出薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的key。
1.首先将可迭代对象变成迭代器对象
2.res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
salary_dict = {
'fujiachen': 3000,
'nash': 100000,
'jinyi': 5000,
'langyigang': 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)}")
# 'fujiachen', v1 = func('fujiachen')
# 'nash', v2 = func('nash')
# 'jinyi', v3 = func('jinyi')
# 'langyigang', v4 = func('langyigang')
print(
f"max(salary_dict, key=lambda name: salary_dict[name]): {max(salary_dict, key=lambda name: salary_dict[name])}")
max(salary_dict): nash max(salary_dict, key=func()): nash max(salary_dict, key=lambda name: salary_dict[name]): nash
2.如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。
sorted()工作原理:
1.首先将可迭代对象变成迭代器对象
2.res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当做判断依据。
lis = [1, 3, 2, 5, 8, 6]
sorted(lis)
print(f"lis: {lis}")
print(f"sorted(lis,reverse=True): {sorted(lis,reverse=True)}")
lis: [1, 3, 2, 5, 8, 6] sorted(lis,reverse=True): [8, 6, 5, 3, 2, 1]
salary_dict = {
'fujiachen': 3000,
'nash': 100000,
'jinyi': 5000,
'langyigang': 2000
}
print(
f"sorted(salary_dict, key=lambda name: salary_dict[name]): {sorted(salary_dict, key=lambda name: salary_dict[name])}")
sorted(salary_dict, key=lambda name: salary_dict[name]): ['langyigang', 'fujiachen', 'jinyi', 'nash']
3.如果我们想对一个列表中的某个人名做处理,可以使用map()方法。
map()工作原理:
1.首先将可迭代对象变成迭代器对象
2.res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。
name_list = ['fujianchen', 'langyigang', 'jinyi']
res = map(lambda name: f"{name} sb", name_list)
print(f"list(res): {list(res)}")
list(res): ['fujianchen sb', 'langyigang sb', 'jinyi sb']
4.如果我们想筛选除名字中含有'sb'的名字,我们可以使用filter()方法。
filter()工作原理:
1.首先将可迭代对象变成迭代器对象
2.res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下。
name_list = ['nash', 'langyigang sb', 'fujianchen sb', 'jinyi sb']
filter_res = filter(lambda name: name.endswith('sb'), name_list)
print(f"list(filter_res): {list(filter_res)}")
list(filter_res): ['langyigang sb', 'fujianchen sb', 'jinyi sb']