Lambda 表示式有何用處?如何使用?

2021-08-20 21:11:54 字數 1701 閱讀 1500

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

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

map

(lambdax:

x*x,

[yfory

inrange(10

)])

這個寫法要好過

defsq(

x):returnx*

xmap(sq

,[yforyin

range(10

)])

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

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

a = [1, 2, 3]

f = lambda x : x + 1

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

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

map(f

,a)

也就是將函式 f 依次套用在 a 的每乙個元素上面,獲得結果 [2, 3, 4]。現在用 lambda 表示式來替換 f,就變成:

map

(lambdax:

x+1,

[1,2

,3])

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

a=[

1,2,

3]r=

foreachina

:r.(

each+1

)

這樣的寫法時,你會發現自己如果能將「遍歷列表,給遇到的每個元素都做某種運算」的過程從乙個迴圈裡抽象出來成為乙個函式 map,然後用 lambda 表示式將這種運算作為引數傳給 map 的話,考慮事情的思維層級會高出一些來,需要顧及的細節也少了一點。python 之中,類似能用到 lambda 表示式的「高階」函式還有 reduce、filter 等等,很多語言也都有這樣的工具(不過這些特性最好不要在 python 中用太多,原因詳見 http://www.

Lambda 表示式有何用處?

簡單來說,程式設計中提到的 lambda 表示式,通常是在需要乙個函式,但是又不想費神去命名乙個函式的場合下使用,也就是指匿名函式。這一用法跟所謂 演算 題目說明裡的維基鏈結 的關係,有點像原子彈和質能方程的關係,差別其實還是挺大的。不談形式化的 演算,只說有實際用途的匿名函式。先舉乙個普通的 py...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

如何理解Lambda表示式

lambda 表示式 lambda expression 是乙個匿名函式,lambda表示式基於數學中的 演算得名,直接對應於其中的lambda抽象 lambda abstraction 是乙個匿名函式,即沒有函式名的函式。lambda表示式可以表示閉包。這裡就展示了lambda是如何從其他表現形式...