lambda匿名函式

2022-05-29 05:48:10 字數 1170 閱讀 8614

1 簡單來說,程式設計中提到的 lambda

表示式,通常是在需要乙個函式,但是又不想費神去命名乙個函式的場合下使用,也就是指匿名函式。這一用法跟所謂 λ 演算(題目說明裡的維基鏈結)的關係,有點像原子彈和質能方程的關係,差別其實還是挺大的。23

不談形式化的 λ 演算,只說有實際用途的匿名函式。先舉乙個普通的 python 例子:將乙個 list 裡的每個元素都平方:

4 map( lambda x: x*x, [y for y in range(10)] )

5這個寫法要好過

6def sq(x): return x * xmap(sq, [y for y in range(10)])

7,因為後者多定義了乙個(汙染環境的)函式,尤其如果這個函式只會使用一次的話。而且第一種寫法實際上更易讀,因為那個對映到列表上的函式具體是要做什麼,非常一目了然。如果你仔細觀察自己的**,會發現這種場景其實很常見:你在某處就真的只需要乙個能做一件事情的函式而已,連它叫什麼名字都無關緊要。lambda 表示式就可以用來做這件事。89

進一步講,匿名函式本質上就是乙個函式,它所抽象出來的東西是一組運算。這是什麼意思呢?模擬

10 a = [1, 2, 3]11和

12 f = lambda x : x + 1

13 ,你會發現,等號右邊的東西完全可以脫離等號左邊的東西而存在,等號左邊的名字只是右邊之實體的識別符號。如果你能習慣 [1, 2, 3] 單獨存在,那麼 lambda x : x + 1也能單獨存在其實也就不難理解了,它的意義就是給「某個數加一」這一運算本身。

1415

現在回頭來看 map() 函式,它可以將乙個函式對映到乙個可列舉型別上面。沿用上面給出的 a 和 f,可以寫:

16map(f, a)

17 也就是將函式 f 依次套用在 a 的每乙個元素上面,獲得結果 [2, 3, 4]。現在用 lambda

表示式來替換 f,就變成:

18 map( lambda x : x + 1, [1, 2, 3] )

19會不會覺得現在很一目了然了?尤其是模擬

2223 和其他很多語言相比,python 的 lambda 限制多多,最嚴重的當屬它只能由一條表示式組成。這個限制主要是為了防止濫用,因為當人們發覺 lambda 很方便,就比較容易濫用,可是用多了會讓程式看起來不那麼清晰,畢竟每個人對於抽象層級的忍耐 / 理解程度都有所不同。

lambda匿名函式

匿名函式 lambda函式是一種快速定義單行的最小函式,是從lisp借用來的,可以用在任何需要函式的地方。def f x,y return x y g lambda x,y x y g 2,3 優點 1 使用python寫一些執行的指令碼時,使用lambda可以省去定義函式的過程,讓 更精簡 2 對...

lambda匿名函式

lambda語句中,冒號前argumes是引數,可以有多個,可以用逗號隔開或其他形式,冒號右邊的是表示式,並將其結果返回。示例 f lambda x,y x y print f 2,3 6myadd lambda args sum args result myadd 1,3,4 print resu...

匿名函式lambda

在python中有個匿名函式特性非常的便捷和有用,用關鍵字lambda就可以宣告乙個匿名函式,所以很多時候直接稱呼為lambda函式。每次介紹新特性的時候,我們都要反問什麼是lambda函式呢?因為又叫匿名函式,所以是指沒有宣告函式名稱的函式,它和平時我們定義普通函式使用def關鍵字不同,lamda...