匿名函数

匿名函数

有名函数

之前我们讲的函数都是又名函数,它是通过函数名来进行调用的

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
}
  1. 如果我们需要从上面的字典中取出薪资最高人的姓名,我们可以使用max()方法,但max()比较的是key

    1. 首先将可迭代对象变成迭代器对象
    2. 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
  1. 取出薪资最低的人的名字,使min()方法

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
print(min(salary_dict, key=lambda name: salary_dict[name]))
sean
  1. 对薪资进行排序,使用sorted()方法

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
print(sorted(salary_dict,key=lambda name :salary_dict[name],reverse=True))
['jason', 'tank', 'nick', 'sean']
  1. map()是对容器元素里的元素进行处理

    1. 首先将可迭代对象变成迭代器对象
    2. 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']
  1. filter()是对容器元素里的元素进行筛选

    1. 首先将可迭代对象变成迭代器对象
    2. 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']
posted @ 2019-06-13 21:17  蔚蓝的爱  阅读(157)  评论(0)    收藏  举报