Python- lambda 函式

Deep Cove, North Vancouver, Canada, photo by Sean Yeh

lambda函式

Lambda(λ)是一個希臘字母。它用來表示許多觀念。例如,數學家會用Lambda來表示空字串、物理學家用Lambda來表示波長、到最近的醫學界使用Lambda來表示新冠肺炎COVID-19的一種變種病毒、在電腦科學上,則用來表示暱名函式( Anonymous Function )。

是匿名函式

匿名函式,是在電腦的編碼過程中,不需要定義函式名稱的一種函式。目前這種函式已經普遍的存在多種程式語言中。在Python中所謂Lambda函式,也就是匿名函式。

它的功能就像是使用def的方式一樣,只是寫法上更為簡潔,可以寫在行內,在使用前不需要先把函式綁定在一個特定的名稱上。

其實在程式撰寫的過程中,即使不使用這種函式,透過一般的函式表示方式,也可以做到完全相同的功能。惟Lambda函式不需要定義名稱,並且只有一行運算式的特性,讓整體程式碼看來更加的簡潔,而受到工程師的喜愛。

單行簡單

一般來說,Lambda函式功能簡單,為單行expression,只能完成非常簡單的功能,不可能執行太複雜的邏輯。也因此特性,讓Lambda函式實現的功能一目了然,甚至不需要專門的名字來說明。

lambda函式的語法

lambda函式的語法很簡單,只有一行。函式本身可以接收多個參數並且返回ㄧ個表達式的值。其中func是指定的名稱,也可以沒有。

func = lambda 參數1, 參數2, ... : 運算式

而一般函式會採用下面的語法:

def func(參數1, 參數2, ...):
運算式
return 回傳值

lambda函式裡面不需要使用return敘述,因為執行lambda函式之後的值會自動被傳回。

舉例

求某數的平方

舉例說明,下面這個函式,可以將輸入的x值,返回其平方數(x ** 2)

def square(x):
return x ** 2

如果改用lambda函式來撰寫的話,會以下面的方式呈現:

lambda x: x ** 2

程式碼只有一行,非常簡潔。

求兩數相加

想要求出x與y兩數字的總和,若採用一般def語法,應該會作如下表示:

def add_number(x,y):
return x+ y

若改用lambda函式加總 x 與 y 兩個參數時:

add_number = lambda x,y : x+ y

將lambda函式賦予變數add_number。取值的時候,只要如下呼叫,即可。

add_number(3,5)

也可以這樣子呼叫:

(lambda x,y : x+y)(3,5)

結果跟上面一樣,都是8。

與一般def函式的差別在於,lambda函式不需要呼叫先前綁定函式的名稱,只需要寫出想要計算的運算式。

if條件判斷

一般來說,條件判斷的寫法如下:

def abs_number(x):
if x > 0:
return x
else:
return -x

上面的函式,是用來將數字x取絕對值。

lambda函式也可以用來進行條件判斷。以上面的程式碼為例,我們可以寫成如下的lambda函式:

abs_number = lambda x : x if x >= 0 else -x

一樣是維持一行的表現方式。

何時適合使用lambda函式

雖然lambda語法看起來很親民好用,一目了然,提供你「耍酷」的機會。但是實際上使用時要很注意,若是濫用的話,會大大的降低程式碼的可讀性,製造難以維護的程式碼,並帶來其他同伴的負擔。那麼,何時該使用lambda語法?何時又該使用正式的def函式語法?

一般來說,若要快速建立一個只用一次之後就會隨手丟棄的「拋棄式」函式的話,採用lambda函式就會非常的合適。常見的例子是搭配map函式一起使用。

但若過於濫用lambda函式,恐影響程式的可讀性。一般來說,lambda函式通常都不是很大,如果您要處理的事情很簡單(如前面所舉的兩數相加之例子),而且不會重複使用的話,就可以考慮使用。

反之,若函式中要處理的程序稍為複雜一點,建議還是採用一般以宣告def的方式來定義函式比較好。最重要的是,時常在心中自問,在目前這個情境下,應該使用一般函式還是lambda函式,才能寫出清楚的程式?

--

--

Sean Yeh
Python Everywhere -from Beginner to Advanced

# Taipei, Internet Digital Advertising,透過寫作讓我們回想過去、理解現在並思考未來。並樂於分享,這才是最大贏家。