1. 程式人生 > >Python全棧學習筆記day 16:匿名函式

Python全棧學習筆記day 16:匿名函式

匿名函式:為了解決那些功能很簡單的需求而設計的一句話函式

這段程式碼
def calc(n):
    return n**n
print(calc(10))
 
換成匿名函式
calc = lambda n:n**n
print(calc(10))

下面給出了一個關於匿名函式格式的說明:

函式名 = lambda 引數 :返回值

#引數可以有多個,用逗號隔開
#匿名函式不管邏輯多複雜,只能寫一行,且邏輯執行結束後的內容就是返回值
#返回值和正常的函式一樣可以是任意資料型別

栗子:返回dic中value最大的那個key

dic={'k1':10,'k2':100,'k3':30}
def func(key):
    return dic[key]
print(max(dic,key=func))   #根據返回值判斷最大值,返回值最大的那個引數是結果

也可以:

dic={'k1':10,'k2':100,'k3':30}
print(max(dic,key=lambda key:dic[key]))

面試題:

現有兩個元組(('a'),('b')),(('c'),('d')),請使用python中匿名函式生成列表[{'a':'c'},{'b':'d'}]

思路:想到zip,和匿名函式,只要考到匿名函式就要想到內建函式,

ret =zip((('a'),('b')),(('c'),('d')))
for i in ret:
    print(i)

('a', 'c')
('b', 'd')

此時輸出的結果和目標已經很相似了,但是現在輸出還是元祖不是字典

ret =zip((('a'),('b')),(('c'),('d')))
def func(tup):
    return {tup[0]:tup[1]}
res = map(func,ret)
for i in res:
    print(i)


{'a': 'c'}
{'b': 'd'}

現在變為字典了,在合成一個列表

ret =zip((('a'),('b')),(('c'),('d')))
def func(tup):
    return {tup[0]:tup[1]}
res = map(func,ret)
print(list(res))



[{'a': 'c'}, {'b': 'd'}]

到此時還是沒有使用匿名函式,在進行簡化

ret =zip((('a'),('b')),(('c'),('d')))
# def func(tup):
#     return {tup[0]:tup[1]}
res = map(lambda tup:{tup[0]:tup[1]},ret)
print(list(res))
print(list(map(lambda tup:{tup[0]:tup[1]},zip((('a'),('b')),(('c'),('d'))))))