Mike的Python學院

Python

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/25

Python Lambda Function應用技巧分享

Q: Python Lambda語法如何使用?
由於Lambda函式只有一行程式碼,所以在撰寫時有一些限制,我們來看一下它的語法:
lambda parameter_list: expression
這邊教大家一個技巧,在撰寫Lambda函式時,於Visual Studio Code輸入 lambda 關鍵字,接著按下 Tab 鍵,就會自動產生範例中的語法,包含了三個部分:
1.lambda關鍵字
2.parameter_list(參數清單)
3.expression(運算式)
其中,parameter_list(參數清單)也就是Lambda函式的傳入參數,可以有多個,以逗號分隔。而expression(運算式)則是針對傳入參數來進行運算,只能有一行運算式,不像一般函式(Function)可以有多行。接下來,我們透過幾個範例來了解如何使用Lambda函式吧。
範例1:
multiply = lambda x, y: x * y
print(multiply(4,2)) #執行結果8
範例2:
print((lambda x, y: x * y)(4, 2)) #執行結果8
Lambda函式支援IIFE語法,意思是利用 function expression 的方式來建立函式,並且立即執行它。
Q: Python Lambda函式的有哪些應用?
1. filter():在可疊代的物件中,依據條件運算式,選擇特定的元素,語法為:
filter(lambda parameter: expression, iterable)
範例:
numbers = [50,2,12,30,27,4]
result = filter(lambda x: x > 10, numbers)
print(list(result)) #執行結果[50,12,30,27]
2. map():在可疊代的物件中,套用特定運算式於每一個元素,語法為:
map(lambda parameter: expression, iterable)
範例:
numbers = [50,2,12,30,27,4]
result = map(lambda x: x * 2, numbers)
print(list(result)) #執行結果[100,4,24,60,54,8]
3. reduce():與map()內建方法同樣在可疊代的物件中,套用特定運算式於每一個元素,但是內部的實作方式不一樣,它的實作步驟為:
將可疊代物件中的前兩個元素先進行Lambda運算式的運算。
接著將第一個步驟的運算結果和可疊代物件中的下一個元素(第三個)傳入Lambda函式進行運算。
依此類推,直到可疊代物件的元素都運算完成。
也因為每一次的運算都是兩個元素傳入,所以語法為:
reduce(lambda parameter1, parameter2: expression, iterable)
範例:
from functools import reduce
numbers = [50,2,12,30,27,4]
result = reduce(lambda x, y: x + y, numbers)
print(result) #執行結果125
4. sorted():用來排序可疊代物件中的元素,語法為:
sorted(iterable, key=lambda parameter: expression)
範例:
cars = [
("mazda", 2000),
("toyota", 1000),
("benz", 5000),
]
print(sorted(cars, key=lambda car: car[1]))
#執行結果[('toyota', 1000),('mazda', 2000),('benz', 3000),]
Q: Lambda函式和一般函式(Function)有什麼不同?
這邊來比較一下Lambda函式與一般函式(Function)的差異為:
1.Lambda函式不需要定義名稱,而一般函式(Function)需定義名稱。
2.Lambda函式只能有一行運算式,而一般函式(Function)可以有多行運算式。
3.Lambda在每一次運算完會自動回傳結果,而一般函式(Function)如果要回傳結果要加上 return 關鍵字。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2019/12/python-lambda-functions.html )網站觀看更多精彩內容。
0 0 140 0