定義
匿名函式指一類無須定義識別符號的函式或子程式。Python用lambda語法定義匿名函式,只需用表示式而無需申明。
lambda語法的定義如下:
lambda [arg1 [,arg2, ... argN]] : expression
除了沒有函式名,其語法與如下函式的定義相同。
匿名函式特點
1.不用取名稱,因為給函式取名是比較頭疼的一件事,特別是函式比較多的時候
2.可以直接在使用的地方定義,如果需要修改,直接找到修改即可,方便以後程式碼的維護工作
3.語法結構簡單,不用使用def 函式名(引數名):這種方式定義,直接使用lambda 引數:返回值 定義即可
lambda這個名稱來自於LISP,而LISP則是從lambda calculus(一種符號邏輯形式)取這個名稱的。在Python中,lambda作為一個關鍵字,作為引入表示式的語法。想比較def函式,lambda是單一的表示式,而不是語句塊!你僅能夠在lambda中封裝有限的業務邏輯,這樣設計的目的:讓lambda純粹為了編寫簡單的函式而設計,def則專注於處理更大的業務。
與普通函式差異
普通函式:
#普通函式,帶倆引數的寫法 def add(x,y): return x*y rs = add(10,20) print(rs)
匿名函式:
#帶有倆引數的匿名函式 b = lambda x,y:x*y rs = b(10,20) print(rs)
例項
#計算存放100個數字的列表的每一個數字的平方,返回一個新的列表 print(list(map(lambda x:x*x,[x for x in range(100)])))
執行結果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225, 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569, 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604, 9801]