函數進階-09匿名函數

一丶有名函數

咱們以前定的函數都是有名函數,它是基於函數名使用。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']

相關文章
相關標籤/搜索