最近看了幾篇匿名函數(shù)的文章,感覺都講的不夠清晰,所以寫一篇匿名函數(shù)的文章
匿名函數(shù)(一句話函數(shù))的定義 lambda開頭 冒號隔開 形參和表達(dá)式
例如 lambda x:x+1 ---->x是形參,x+1為表達(dá)式,返回函數(shù)對象
lambda x:x+1和定義變量一樣,如果只定義沒有什么意義,定義完成之后就會被python解釋器回收
言歸正傳,lambda單獨(dú)表達(dá)式很簡單,不過還有l(wèi)ambda...if....else , lambda.....for 比較繞
話不多說,上代碼
lambda......if.....else 格式,例如
lambda x:True if x % 3==0 else return False
表示當(dāng)入?yún)⒑?取模 滿足條件為真 ,則返回if左邊的數(shù)據(jù),如果為假則返回 if 右邊的數(shù)據(jù)
轉(zhuǎn)換成函數(shù)為
def lam(x):
if x % 3 ==0:
return True
else:
return False
lambda...for 格式,例如
f = [lambda x: x * i for i in range(4)] #i = f[0,1,2,3]
f為一個數(shù)組,for 循環(huán)把lambda函數(shù)加入這個數(shù)組中
由于我循環(huán)了4次,分別給lambda函數(shù)標(biāo)號,如f[lambda1.lambda2,lambda3,lambda4] ***lambda返回的函數(shù)對象,f[0]輸出lambda1這個函數(shù)對象
當(dāng)f 里面的for循環(huán)循環(huán)4次后 i的值為3,然后執(zhí)行l(wèi)ambda表達(dá)式,并沒有跳出函數(shù),所以當(dāng)你運(yùn)行;lambda表達(dá)式的時候i永遠(yuǎn)為3,數(shù)組f里面存在各個元素有是lambda對象 ,所以 我們調(diào)用這個lambda表達(dá)式為 f[index](x) index表示f數(shù)組中那個lamdba函數(shù)對象 x表述lambda的形式參數(shù)
所以我們給響應(yīng)賦值f[0](2) ----輸出6 ,f[1](2)------輸出6 *由于for循環(huán)結(jié)束后i的值為3并沒有跳出函數(shù)體 所以 表達(dá)式為:lambda 2:2*3,值根據(jù)lambda的入?yún)⒌淖兓兓?/span>
下面 轉(zhuǎn)化為函數(shù):
def func():
f = []
for i in range(4):
def lambda(x):
return x * i
f.append(lambda)
return f
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。