Photo by Fatos Bytyqi on Unsplash
Lambda函式,也就是匿名函式,不需要定義名稱,只有一行運算式,語法非常簡潔,功能強大,所以現代程式語言如Java、C#及Python等都支援Lambda函式,適用於小型的運算,Python的一些內建函式甚至使用它作為參數值的運算。現在就來介紹如何在Python中使用Lambda函式與技巧吧,包含:- Lambda語法與範例
- Python Lambda函式的應用
- Lambda函式 vs 一般函式(Function)
一、Lambda語法與使用範例
由於Lambda函式只有一行程式碼,所以在撰寫時有一些限制,我們來看一下它的語法:
lambda parameter_list: expression
這邊教大家一個技巧,在撰寫Lambda函式時,於Visual Studio Code輸入 lambda 關鍵字,接著按下 Tab 鍵,就會自動產生範例中的語法,包含了三個部分:- lambda關鍵字
- parameter_list(參數清單)
- expression(運算式)
其中,parameter_list(參數清單)也就是Lambda函式的傳入參數,可以有多個,以逗號分隔。而expression(運算式)則是針對傳入參數來進行運算,只能有一行運算式,不像一般函式(Function)可以有多行。接下來,我們透過幾個範例來了解如何使用Lambda函式吧。
範例1:
範例中將Lambda函式指派給一個變數,接著就可以透過此變數並傳入參數來進行呼叫。
範例2:
Lambda函式支援IIFE(immediately invoked function expression)語法,意思是利用 function expression 的方式來建立函式,並且立即執行它,語法如下:
(lambda parameter: expression)(argument)
範例中即是利用此語法在Lambda函式定義後,立即傳入參數執行。
範例3:
透過此範例可以知道,當Lambda函式經定義後,沒有進行呼叫的動作,他會回傳一個function
object且包含了記憶體位址,如果要印出值則可透過範例二的IIFE語法進行呼叫,如下範例:
二、Python Lambda函式的應用
1. filter():在可疊代的物件中,依據條件運算式,選擇特定的元素,語法為:
filter(lambda parameter: expression, iterable)
範例
2. map():在可疊代的物件中,套用特定運算式於每一個元素,語法為:
map(lambda parameter: expression, iterable)
範例
3. reduce():與map()內建方法同樣在可疊代的物件中,套用特定運算式於每一個元素,但是內部的實作方式不一樣,它的實作步驟為:
- 將可疊代物件中的前兩個元素先進行Lambda運算式的運算。
- 接著將第一個步驟的運算結果和可疊代物件中的下一個元素(第三個)傳入Lambda函式進行運算。
- 依此類推,直到可疊代物件的元素都運算完成。
reduce(lambda parameter1, parameter2: expression, iterable)
範例
PS.使用reduce()內建方法時,記得引用functools模組。
4. sorted():用來排序可疊代物件中的元素,語法為:
sorted(iterable, key=lambda parameter: expression)
範例:
sorted()內建方法利用關鍵字參數key來指定排序的依據,透過Lambda函式就可以自訂要排序的標的。範例中使用car參數來接收串列(List)中的元素,接著回傳元組(Tuple)的第二個元素(也就是價格),來進行排序。
三、Lambda函式 vs 一般函式(Function)
這邊來比較一下Lambda函式與一般函式(Function)的差異為:
- Lambda函式不需要定義名稱,而一般函式(Function)需定義名稱。
- Lambda函式只能有一行運算式,而一般函式(Function)可以有多行運算式。
- Lambda在每一次運算完會自動回傳結果,而一般函式(Function)如果要回傳結果要加上 return 關鍵字。
四、小結
以上就是今天Python
Lambda函式使用上的觀念與技巧,從範例中可以看到,在Python內建函式中使用Lambda函式非常的強大,適度的使用讓程式碼簡潔了許多。不過也建議避免過度使用與撰寫複雜的Lambda函式,不然程式碼將不易維護,複雜的邏輯運算,還是優先選擇一般函式(Function)較為理想。
感謝大家今天的收看,在練習的過程中若有碰到問題或說明不清楚的地方,歡迎留言與我分享!
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
你可能感興趣的文章
Thanks for sharing, it's very clear.
回覆刪除You're welcome. Thank you for your support.
刪除非常感謝Mike的文章!!!
回覆刪除不客氣~ 希望這樣的內容有幫助到您 :)
刪除內容真的寫的非常好,感謝
回覆刪除謝謝Nelson的鼓勵,會持續分享好文給大家,別忘了訂閱文章與加入Learn Code With Mike粉絲專頁,和我分享交流唷~ :)
刪除內容詳細且有應用、程式碼,感謝分享。
回覆刪除