iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Python

初學者的 30 天 Python 復健課程系列 第 16

復健第十六天:聽起來好像很困難的 Lambda 函式

  • 分享至 

  • xImage
  •  

Lambda 函式

Lambda 函式是一種簡短的匿名函式,所謂「匿名」就是「沒有名稱」,而之所以「沒有名稱」代表「這個函式通常很簡短」,它可以接受任意數量的參數,但只能有一個表達式

如果有學過 JavaScript 的話,可以把 Lambda 函式類似於 JavaScript 中的匿名函式,而當我們需要在另一個函式內定義匿名函式時,就會用到 Lambda 函式。

建立 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 函式

當然,在一般的函式內,也可以再放入 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,蠻快就能上手了。


上一篇
復健第十五天:成為串列大師吧——串列推導式 List Comprehension
下一篇
復健第十七天:寫程式就是一場錯誤 Type Errors 的冒險
系列文
初學者的 30 天 Python 復健課程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言