Pin-Jiun / Python

Python Document
0 stars 0 forks source link

36-Python Lambda Function #36

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

Lambda函式

Lambda function也就是匿名函式,不需要定義名稱,只有一行運算式,語法非常簡潔,功能強大,所以現代程式語言如Java、C#及Python等都支援Lambda函式

適用於小型的運算,Python的一些內建函式甚至使用它作為參數值的運算。

現在就來介紹如何在Python中使用Lambda函式與技巧吧,包含: Lambda語法與範例 Python Lambda函式的應用 Lambda函式 vs 一般函式(Function)


Lambda語法與範例

Lambda函式只有一行程式碼, 語法包含了三個部分:

  1. lambda關鍵字
  2. parameter1, parameter2, parameter3...(參數清單) parameter_list也就是Lambda函式的傳入參數,可以有多個,以逗號分隔
  3. expression(運算式) expression(運算式)則是針對傳入參數來進行運算,只能有一行運算式,不像一般函式(Function)可以有多行
lambda parameter_list: expression

範例

mutply = lambda x, y: x*y
#將Lambda函式指派給一個變數,接著就可以透過此變數並傳入參數來進行呼叫。

print(mutply(4,2))

Lambda函式支援IIFE(immediately invoked function expression)語法,意思是利用 function expression 的方式來建立函式,並且立即執行它,語法如下:

(lambda parameter: expression)(argument)
print((lambda x, y: x/y)(12,2))
title = "test"
print(lambda text: print(text))
#lambda text: print(text)是lambda這個匿名函數object
#<function <lambda> at 0x000001A70D6D3E20>

#如要正確使用應該這樣
(lambda text: print(text))(title)
#注意(lambda整個物件要括號才能接)(參數)使用
#以下不會出現任何東西
#lambda text: print(text)(title)

Python Lambda函式的應用

filter(function, iterable)

然後 filter() 就會回傳一個 filter 物件,是一個可迭代的物件,物件內的元素則為輸入函式後返回 True 的元素。

# Inputs
inputs = [
    'a',
    'bb',
    'ccc',
    'dddd',
    'eeeee',
]

# Function
def bigger_than_three(string):
    return True if len(string) > 3 else False

# Filter
result = filter(bigger_than_three, inputs)
print(result)
print(list(result))

使用Lambda函式可以使整個code更簡潔

numbers = [20,3,4,56,87,60,26]

result = filter(lambda x: x>10, numbers)
print(list(result))
#[20, 56, 87, 60, 26]

map():在可疊代的物件中,套用特定運算式於每一個元素,語法為

map(lambda parameter: expression, iterable)
numbers = [20,3,4,56,87,60,26]

result = map(lambda x: x-10, numbers)
print(list(result))
#[10, -7, -6, 46, 77, 50, 16]

sorted():用來排序可疊代物件中的元素,語法為:

sorted(iterable, key=lambda parameter: expression)

sorted()內建方法利用關鍵字參數key來指定排序的依據,透過Lambda函式就可以自訂要排序的標的

cars = [
    ("mazda",3),
    ("toyota",1),
    ("benz", 5)
]

print(sorted(cars, key= lambda array: array[1]))

從範例中可以看到,在Python內建函式中使用Lambda函式非常的強大,適度的使用讓程式碼簡潔了許多。 不過也建議避免過度使用與撰寫複雜的Lambda函式,不然程式碼將不易維護,複雜的邏輯運算,還是優先選擇一般函式較為理想。

https://www.learncodewithmike.com/2019/12/python-lambda-functions.html