匿名函數指一類無須定義標識符的函數或子程序。Python用lambda語法定義匿名函數,只需用表達式而無需申明。
lambda語法的定義以下:python
lambda [arg1 [,arg2, ... argN]] : expression
有些時候,當咱們在傳入函數時,不須要顯式地定義函數,直接傳入匿名函數更方便。匿名函數有個限制,就是隻能有一個表達式,無需寫return,返回值就是該表達式的結果。用匿名函數有個好處,由於函數沒有名字,沒必要擔憂函數名衝突。此外,匿名函數也是一個函數對象,也能夠把匿名函數賦值給一個變量,再利用變量來調用該函數express
實例:函數
# 可寫函數說明 sum = lambda arg1, arg2: arg1 + arg2 # 調用sum函數 print("相加後的值爲 : ", sum(10, 20)) print("相加後的值爲 : ", sum(20, 20))
以上代碼,輸出:spa
相加後的值爲 : 30 相加後的值爲 : 40
在定義時直接被調用,好比:code
print((lambda x, y: x-y)(3, 4))
以上代碼,輸出:對象
-1
但一般都是在定義lambda函數的同時將其應用做爲參數傳遞給另外一個函數,該函數在其處理過程當中對lambda定義的函數進行調用,例如:blog
L = [1, 2, 3, 4, 5, 6, 7, 8] # 過濾掉全部的偶數 res = filter(lambda x: x % 2 == 1, L) print(list(res))
以上代碼,輸出:遞歸
[1, 3, 5, 7]
上面幾個實例都是比較簡單的,咱們再來看幾個複雜的。假如,咱們要找出兩個數中小的那一個,咱們能夠用lambda這麼寫:作用域
fn = lambda x, y: x if x < y else y print(fn(1, 2))
以上代碼,輸出:get
1
在上面的實例中,函數體裏的那種寫法,其實是python中的三元表達式(三目運算符)。在Python中,語法以下:
爲真時的結果 if 斷定條件 else 爲假時的結果
例如:
1 if 5>3 else 0
是先輸出結果,再斷定條件,輸出1,若是5大於3,不然輸出0
再來幾個更復雜的,後面這幾個若是你是初學者,能夠略過!
柯里化(什麼是柯里化?https://baike.baidu.com/item/%E6%9F%AF%E9%87%8C%E5%8C%96/10350525?fr=aladdin):
res = (lambda x: (lambda y: (lambda z: x + y + z)(1))(2))(3) print(res)
以上代碼,輸出:
6
遞歸:
func = lambda n: 1 if n == 0 else n * func(n-1) print(func(5))
以上代碼,輸出:
120
或
f = lambda func, n: 1 if n == 0 else n * func(func, n - 1) print(f(f, 4))
以上代碼,輸出:
24
匿名函數有如下幾個特色: