一、匿名函數介紹
在Python中,不通過def來聲明函數名字,而是通過lambda關鍵字來定義的函數稱為匿名函數。
lambda函數能接收任何數量(可以是0個)的參數,但只能返回一個表達式的值,lambda函數是一個函數對象,直接賦值給一個變量,這個變量就成了一個函數對象。
語法:lambda 參數:表達式
先寫lambda關鍵字,然后依次寫匿名函數的參數,多個參數中間用逗號連接,然后是一個冒號,冒號后面寫返回的表達式。
使用lambda函數可以省去函數的定義,不需要聲明一個函數然后使用,而可以在寫函數的同時直接使用函數。
使用場景:
1.需要將一個函數對象作為參數來傳遞時,可以直接定義一個lambda函數(作為函數的參數或返回值)
2.要處理的業(yè)務符合lambda函數的情況(任意多個參數和一個返回值),并且只有一個地方會使用這個函數,不會在其他地方重用,可以使用lambda函數
3.與一些Python的內置函數配合使用,提高代碼的可讀性
二、匿名函數與普通函數的對比
可以看到,lambda適用于多個參數、一個返回值的情況,可以用一個變量來接收,變量是一個函數對象,執(zhí)行這個函數對象的結果與執(zhí)行一個普通函數的結果一樣。
lambda函數比普通函數更簡潔,且沒有聲明函數名,上面的代碼是用一個變量來接收lambda函數返回的函數對象,并不是lambda函數的名字。
三、匿名函數的多種形式
可以看到,lambda的參數可以0個到多個,并且返回的表達式可以是一個復雜的表達式,只要值是一個值就行了。
四、lambda作為一個參數傳遞
上面的代碼中,sub中需要傳入一個函數,然后這個函數在sub里面執(zhí)行,這時候我們就可以使用lambda函數,因為lambda就是一個函數對象。
五、lambda作為函數的返回值
匿名函數可以作為一個函數的返回值,在上面的代碼中,run返回的是一個匿名函數,返回的是一個函數對象,當我們執(zhí)行這個函數時,可以得到lambda函數的結果。
注意:其中的a,b兩個參數是run中的參數,但我們執(zhí)行返回的函數run_a時,已經不在run的作用域內了,而lambda函數仍然能使用a,b參數。說明lambda函數會將它的運行環(huán)境保存一份,一直保留到它自己執(zhí)行的時候使用。