標籤:multi 簡單 ++ 命名 return for迴圈 tip 產生器 元組
匿名函數-lambda
匿名函數 lambda [arg1 [,arg2,.....argn]]:expression lambda只是一個運算式,函數體比def簡單很多。 lambda的主體是一個運算式,而不是一個代碼塊。僅僅能在lambda運算式中封裝有限的邏輯進去。 lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全域命名空間裡的參數。 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內嵌函式,後者的目的是調用小函數時不佔用棧記憶體從而增加運行效率。 exp: dic = {‘k1‘: 10, ‘k2‘: 50, ‘k3‘: 100, ‘k4‘: 80} print(max(dic,key=lambda k:dic[k])) 內建函數中參數帶key的有以下: max min filter map sorted 以上都可以通過和lambda合用完成一些功能 exp2: 現有兩元組tup1,tup2,請使用匿名函數生產列表lst tup1 = ((‘a‘),(‘b‘)) tup2 = ((‘c‘),(‘d‘)) lst = [{‘a‘:‘c‘},{‘b‘:‘d‘}] 寫法1:自己寫的 lst = lambda x,y: [{(x[i][0]):y[i][0]} for i in range(len(x))] print(lst(tup1,tup2)) [{‘a‘: ‘c‘}, {‘b‘: ‘d‘}] 寫法2: tup1 = ((‘a‘),(‘b‘)) tup2 = ((‘c‘),(‘d‘)) # lst = [{‘a‘:‘c‘},{‘b‘:‘d‘}] # ret = zip(tup1,tup2) # def func(t): # return {t[0]:t[1]} # func = lambda t:{t[0]:t[1]} # res = map(lambda t:{t[0]:t[1]},zip(tup1,tup2)) print(list(map(lambda t:{t[0]:t[1]},zip(tup1,tup2)))) exp3.以下代碼的輸出是什嗎?請給出答案並解釋。 def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 請修改multipliers的定義來產生期望的結果。 解析: def multipliers(): return [lambda x : i *x for i in range(4)] #返回列表推導式 [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x] print([m(2) for m in multipliers()]) # [m(2) for m in [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]] # multipliersw()為[lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x] # [m(2) for m in [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]] # m 為 lambda x : i *m, 4次 # m(2) [lambda x : i *2,lambda x : i *2,lambda x : i *2,lambda x : i *2]] #而此時multipliers()中的for迴圈已執行完,i最後的值為3 # 所以 [lambda x : 3 *2,lambda x : 3 *2,lambda x : 3 *2,lambda x : 3 *2]] #[6, 6, 6, 6] exp4.以下代碼的輸出是什嗎?請給出答案並解釋。 def multipliers(): return (lambda x : i *x for i in range(4)) #返回一個產生器 g =(lambda x : i *x for i in range(4) print([m(2) for m in multipliers()]) # [m(2) for m in multipliers()] # [m(2) for m in (lambda x : i *x for i in range(4)] # [m(2) for m in (lambda x : 0 *x,lambda x : 1 *x,lambda x : 2 *x,lambda x : 3 *x] # [2 * 0,,2 * 1, 2 * 2,2 * 3] #[0,2,4,6]
匿名函數-lambda