python中的lambda表示式

2021-08-20 03:26:10 字數 1701 閱讀 5998

簡單來說,程式設計中提到的 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.

Python中的lambda形式

python中的lambda語句被用來建立新的函式物件,並且在執行時返回它們。注意 1 下面的例子使用make repeater函式在執行時,通過lambda語句來建立新的函式物件,並且返回它。在這裡,lambda需要乙個引數,後面僅跟單個表示式作為函式體,而表示式的值被這個新建的函式返回。2 注意...

python中的lambda函式

lambda函式也叫匿名函式,即,函式沒有具體的名稱。先來看乙個最簡單例子 deff x returnx 2printf 4 python中使用lambda的話,寫成這樣 g lambdax x 2printg 4 lambda表示式在很多程式語言都有對應的實現。比如c varg x x 2cons...

python中的lambda函式

今天學習python裡面的高階函式map f list 的時候看見這樣一行 print map lambda x x 3,range 6 我已經知道 map函式的首個引數是乙個函式,後面的乙個或者多個list or tuple作為第乙個引數 也就是那個函式 的引數,以map的方式遍歷執行,並返回乙個...