iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Software Development

跟著 OXXO 一起學 Python系列 第 31

( Day 15.2 ) Python 匿名函式 lambda

  • 分享至 

  • xImage
  •  

lambda 函式是「只有一行」的函式,可以用來處理一些小型函式,就可以不用為了一小段程式碼,額外新增一個有名稱的函式,這篇教學將會介紹 Python 的匿名函式。

原文參考:匿名函式 lambda

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

匿名函式的特性

lambda 匿名函式具有下列幾種特性:

  • 匿名函式不需要定義名稱,一般函式需定義名稱。
  • 匿名函式只能有一行運算式,一般函式可以有多行運算式。
  • 匿名函式執行完成後自動回傳結果,一般函式加上 return 關鍵字才能回傳結果。

使用匿名函式 lambda

lambda 函式的使用方法為「lambda 名稱: 內容」,下方的程式裡,lambda 函式執行的結果等同於 hello 函式。

def hello(title):
    print(title)

hello('oxxo')      # oxxo
(lambda title: print(title))('oxxo')   # oxxo

使用多個參數

lambda 函式可以支援參數,使用時「不需要用小括號」包住參數,如果有多個參數時,使用「逗號」分隔每個參數,此外,如果函式裡會有回傳值,在 lambda 函式裡不需要撰寫 return 語法,計算完畢就會將值回傳

下方的程式裡,lambda 函式執行的結果等同於 hello 函式,會計算出 x+y 的數值。

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

a = hello(1,2)
b = (lambda x, y: x+y)(1,2)
print(a)    # 3
print(b)    # 3

lambda 函式可以給予一個變數作為名稱 ( function name ),使用時就像是呼叫函式的用法,但仍然要注意 lambda 函式只能撰寫「一行程式」,所以只適用於比較小型的程式。

下方的程式裡,lambda 函式 b 執行的結果等同於 a 函式,會計算出 x+y 的數值。

def a(x, y):
    return x+y
b = lambda x, y: x+y
print(a(1,2))   # 3
print(b(1,2))   # 3

搭配 for 迴圈

下方的程式將 lambda 函式 y 與 for 迴圈搭配 ( 參考 for 迴圈 ),效果等同於 x 函式。

def x(n):
    a = list(range(n))
    return a
y = lambda n: [i for i in range(n)]   # 計算後回傳串列結果
print(x(5))    # [0, 1, 2, 3, 4]
print(y(5))    # [0, 1, 2, 3, 4]

搭配 if 判斷式

下方的程式將 lambda 函式 y 與 if 判斷式搭配 ( 參考 邏輯判斷 ( if、elif、else ) ),效果等同於 x 函式。

def y(n):
    if n<10:
        return True
    else:
        return False
x = lambda n: True if n<10 else False   # 判斷是否小於 10,回傳 True 或 False
print(x(5))   # True
print(y(5))   # True

搭配 map 方法

下方的程式將 lambda 函式 map 方法搭配,產生一個新的 b 串列,b 串列的項目是 a 串列項目的平方。( 參考:map )

a = [1,2,3,4,5,6,7,8,9]
b = map(lambda x: x*x, a)
print(list(b))    # [1, 4, 9, 16, 25, 36, 49, 64, 81]

搭配 filter 方法

下方的程式將 lambda 函式 filter 方法搭配,filter 方法會將 True 的項目留下,所以新串列的項目都會是大於 5 的數字。( 參考:filter )

a = [1,2,3,4,5,6,7,8,9]
b = filter(lambda x: x>5, a)
print(list(b))    # [6, 7, 8, 9]

搭配 sorted 方法

下方的程式將 lambda 函式 sorted 方法搭配,當 sorted 方法設定 key 參數時,會根據 key 進行排序,所以會根據陣列中第二個項目的大小進行排序。( 參考:sorted )

a = [[1,2],[4,3],[5,1],[9,2],[3,7]]
b = sorted(a, key = lambda x: x[1])
print(list(b))    # [[5, 1], [1, 2], [9, 2], [4, 3], [3, 7]]

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 15.1 ) Python 函式 function
下一篇
( Day 16.1 ) Python 遞迴 recursion
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言