Lambda 函式是一種簡短的匿名函式,所謂「匿名」就是「沒有名稱」,而之所以「沒有名稱」代表「這個函式通常很簡短」,它可以接受任意數量的參數,但只能有一個表達式。
如果有學過 JavaScript 的話,可以把 Lambda 函式類似於 JavaScript 中的匿名函式,而當我們需要在另一個函式內定義匿名函式時,就會用到 Lambda 函式。
要建立 Lambda 函式,我們會需要使用 lambda
關鍵字,後面接上一個或多個參數,參數後面再接上一個表達式。
Lambda 函式與一般的函式不同之處在於「不需要使用 return
返回回傳值,而會自己回傳表達式的結果。
# 語法
x = lambda param1, param2, param3: param1 + param2 + param3 # 冒號後是表達式
print(x(arg1, arg2, arg3))
比較一般 function 與 Lambda 的使用差別:
# 有名稱的函式
def add_two_nums(a, b):
return a + b
print(add_two_nums(2, 3)) # 5
# 將上述函式改為 Lambda 函式
add_two_nums = lambda a, b: a + b
print(add_two_nums(2, 3)) # 5
# 自調用 Lambda 函式
(lambda a, b: a + b)(2,3) # 返回 5
print((lambda a, b: a + b)(2, 3)) # 需要用 print() 才能印出返回的結果
# 其他範例
square = lambda x : x ** 2
print(square(3)) # 9
cube = lambda x : x ** 3
print(cube(3)) # 27
# 多變數運算
multiple_variable = lambda a, b, c: a ** 2 - 3 * b + 4 * c
print(multiple_variable(5, 5, 3)) # 22
可以看到 Lambda 與一般函式有一個很不同的地方在於,一般函式著重於「可重複使用」,而 Lambda 函式則可以當作是「拋棄式函式」,僅僅是用一次。
當然,在一般的函式內,也可以再放入 Lambda 函式。
def power(x):
return lambda n : x ** n
cube = power(2)(3) # 函式 power 現在需要兩個參數,分別放在不同的括號中
print(cube) # 8
two_power_of_five = power(2)(5)
print(two_power_of_five) # 32
我第一次在學 Python 時,並沒有學到 Lambda
函式,所以在寫這個章節的時候,也是完全新的開始,很擔心自己不夠理解,不過 Lambda
並沒有想像中的那麼恐怖,多試著把一般 function 轉換為 Lambda,蠻快就能上手了。