lambda是python程式語言中使用頻率較高的乙個關鍵字。那麼,什麼是lambda?它有哪些用法?網上的文章汗牛充棟,可是把這個講透的文章卻不多。這裡,我們通過閱讀各方資料,總結了關於python中的lambda的「乙個語法,三個特性,四個用法,乙個爭論」。
在python中,lambda的語法是唯一的。其形式如下:
lambda argument_list: expression
其中,lambda是python預留的關鍵字,argument_list和expression由使用者自定義。具體介紹如下。
這裡的argument_list是引數列表,它的結構與python中函式(function)的引數列表是一樣的。具體來說,argument_list可以有非常多的形式。例如:
這裡的expression是乙個關於引數的表示式。表示式**現的引數需要在argument_list中有定義,並且表示式只能是單行的。以下都是合法的表示式:
這裡的lambda argument_list: expression表示的是乙個函式。這個函式叫做lambda函式。
lambda函式有如下特性:
lambda函式是匿名的:所謂匿名函式,通俗地說就是沒有名字的函式。lambda函式沒有名字。
lambda函式有輸入和輸出:輸入是傳入到引數列表argument_list的值,輸出是根據表示式expression計算得到的值。
lambda函式一般功能簡單:單行expression決定了lambda函式不可能完成複雜的邏輯,只能完成非常簡單的功能。由於其實現的功能一目了然,甚至不需要專門的名字來說明。
下面是一些lambda函式示例:
由於lambda語法是固定的,其本質上只有一種用法,那就是定義乙個lambda函式。在實際中,根據這個lambda函式應用場景的不同,可以將lambda函式的用法擴充套件為以下幾種:
將lambda函式賦值給乙個變數,通過這個變數間接呼叫該lambda函式。
例如,執行語句add=lambda x, y: x+y,定義了加法函式lambda x, y: x+y
x+yx+
y,並將其賦值給變數add,這樣變數add便成為具有加法功能的函式。例如,執行add(1,2),輸出為3。
將lambda函式賦值給其他函式,從而將其他函式用該lambda函式替換。
例如,為了把標準庫time中的函式sleep的功能遮蔽(mock),我們可以在程式初始化時呼叫:time.sleep=lambda x:none。這樣,在後續**中呼叫time庫的sleep函式將不會執行原有的功能。例如,執行time.sleep(3)時,程式不會休眠3秒鐘,而是什麼都不做。
將lambda函式作為其他函式的返回值,返回給呼叫者。
函式的返回值也可以是函式。例如return lambda x, y: x+y
x+yx+
y返回乙個加法函式。這時,lambda函式實際上是定義在某個函式內部的函式,稱之為巢狀函式,或者內部函式。對應的,將包含巢狀函式的函式稱之為外部函式。內部函式能夠訪問外部函式的區域性變數,這個特性是閉包(closure)程式設計的基礎,在這裡我們不展開。
將lambda函式作為引數傳遞給其他函式。
部分python內建函式接收函式作為引數。典型的此類內建函式有這些。
另外,部分python庫函式也接收函式作為引數,例如gevent的spawn函式。此時,lambda函式也能夠作為引數傳入。
事實上,關於lambda在python社群是存在爭議的。python程式設計師對於到底要不要使用lambda意見不一致。
關於lambda的爭執沒有定論。在實際中,是否使用lambda程式設計取決於程式設計師的個人喜好。
Python基礎刻意練習 函式與lambda表示式
本系列定位為複習筆記,某些內容並未提及。在此記錄一些典型疑問和我在學習中的問題或經常遺忘的細節,也會新增一些覺得有意思的部分 其實就是隨心所欲 內容主要使用 進行傳達 def printme str print str printme 1 printme 2 temp printme hello p...
python學習之map函式和lambda函式
map 是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。map function,iterable,在map中,不會對itetable進行修改 def fun x return 2 x t ...
python基礎教程之匿名函式lambda
python lambda 當我們在使用函式時,有時候,並不需要顯示的定義乙個函式,我們可以使用匿名函式更加方便,程式設計客棧在python中對匿名函式也提供了支援。比如當我們想計算兩個數a,b之和時,即f a,b a b。我們可以有兩種方法完成,第一種就是顯示的定義乙個函式f x,y 然後將引數傳...