匿名函數(shù)
當(dāng)我們?cè)趧?chuàng)建函數(shù)時(shí),有些時(shí)候谜酒,不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便妻枕。這省去了我們挖空心思為函數(shù)命名的麻煩僻族,也能少寫不少代碼,很多編程語(yǔ)言都提供這一特性屡谐。
Python語(yǔ)言使用lambda
關(guān)鍵字來(lái)創(chuàng)建匿名函數(shù)述么。
所謂匿名,即不再使用def
語(yǔ)句這樣標(biāo)準(zhǔn)的形式定義一個(gè)函數(shù)愕掏。
- lambda只是一個(gè)表達(dá)式,而不是一個(gè)代碼塊度秘,函數(shù)體比def簡(jiǎn)單很多。
- 僅僅能在lambda表達(dá)式中封裝有限的邏輯饵撑。
- lambda 函數(shù)擁有自己的命名空間剑梳。
例如:lambda x: x * x
唆貌。它相當(dāng)于下面的函數(shù):
def f(x):
return x*x
關(guān)鍵字lambda表示匿名函數(shù),冒號(hào)前面的x表示函數(shù)參數(shù)阻荒,x*x是執(zhí)行代碼
匿名函數(shù)只能有一個(gè)表達(dá)式挠锥,不用也不能寫return語(yǔ)句,表達(dá)式的結(jié)果就是其返回值侨赡。 匿名函數(shù)沒(méi)有函數(shù)名字蓖租,不必?fù)?dān)心函數(shù)名沖突,節(jié)省字義空間羊壹。此外蓖宦,匿名函數(shù)也是一個(gè)函數(shù)對(duì)象,也可以把匿名函數(shù)賦值給一個(gè)變量油猫,再利用變量來(lái)調(diào)用該函數(shù):
f = lambda x: x * x
f
<function <lambda> at 0x3216fef44>
f(6)
36
也可以把匿名函數(shù)作為別的函數(shù)的返回值返回
def count(i,j):
return lambda : i*j
f = count(6,7)
print(f())
匿名函數(shù)的應(yīng)用
對(duì)列表中的字典進(jìn)行排序
lis = [1,-2,4,-3]
lis.sort(key=abs)
print(lis)
infors = [{'name':'cangls','age':18},{'name':'bols','age':20},{'name':'jtls','age':25}]
infors.sort(key = lambda x:x['name'])
print(infors)
匿名函數(shù)當(dāng)做實(shí)參
def test(a,b,func):
result = func(a,b)
return result
nums = test(11,22,lambda x,y:x+y)
print(nums)