咱們以前定的函數都是有名函數,它是基於函數名使用。python
def func(): print('from func') func() func() func() print(func)
from func from func from func <function func at 0x10518b268>
函數
匿名函數,他沒有綁定名字,使用一次即被收回,加括號既能夠運行。code
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()方法聯用。it
salary_dict = { 'fujiachen': 3000, 'nash': 100000, 'jinyi': 5000, 'langyigang': 2000 }
1.若是咱們想從上述字典中取出薪資最高的人,咱們能夠使用max()方法,可是max()默認比較的是字典的key。io
1.首先將可迭代對象變成迭代器對象
2.res=next(迭代器對象),將res當作參數傳給key指定的函數,而後將該函數的返回值當作判斷依據function
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()方法。class
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']