lambda 函式
💻

lambda 函式

Tags
Python
2021
Published
Published October 29, 2021

前言

Python 裡面有一個指令稱為 lambda,中文我們稱作匿名函數,當我們的函數功能很簡單 (一行就可以寫完),不想要另外進行 def 宣告,就可以使用 lambda 方法來取代 def 宣告。

lambda 語法

  • lambda 語法
    • lambda parameter_list : expression
      • lambda:關鍵字
      • parameter_list:參數清單,可以有多個,以逗號分隔
      • expression:運算式,只能有一行運算式

範例說明

Add

  • Code
    • x = lambda a : a + 10 print(x(5))
  • Output
    • 15

Multiply

  • Code
    • x = lambda a, b : a * b print(x(5, 6))
  • Output
    • 30

Summarize

  • Code
    • x = lambda a, b, c : a + b + c print(x(5, 6, 2))
  • Output
    • 13

Function: doubles the number you send in

  • Code
    • def myfunc(n): return lambda a : a * n doubler = myfunc(2) print(doubler(11))
  • Output
    • 22

Function: triples the number you send in

  • Code
    • def myfunc(n): return lambda a : a * n tripler = myfunc(3) print(tripler(11))
  • Output
    • 33

Combined with filter() method

  • filter() 描述
    • 用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表
  • filter() 語法
    • filter(function, iterable)
      • function:判斷函數
      • iterable:可迭代的 object
    • Code
      • def is_odd(n): return n % 2 == 1 odd = filter(is_odd, [1, 2, 3, 4, 5]) print(odd)
    • Output
      • [1, 3, 5]
  • lambda combined with filter() method
    • Code
      • num = [1, 2, 3, 4, 5] n = [] for i in filter(lambda x : x % 2 == 1, num): n.append(i) print(n)
    • Output
      • [1, 3, 5]

Combined with map() method

  • map() 描述
    • 會根據提供的函數對指定序列做映射,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表
  • map() 語法
    • map(function, iterable, ...)
      • function:函數
      • iterable:一個或多個 list
    • Code
      • def square(x): return x ** 2 n = list(map(square, [1, 2, 3, 4, 5])) print(n)
    • Output
      • [1, 4, 9, 16, 25]
  • lambda combined with map() method
    • Code
      • num = [1, 2, 3, 4, 5] n = [] for i in map(lambda x : x ** 2, num): n.append(i) print(n)
    • Output
      • [1, 4, 9, 16, 25]

Combined with reduce() method

  • reduce() 描述
    • 會對參數序列中元素進行累積
  • reduce() 語法
    • reduce(function, iterable[, initializer])
      • function:函數,有 2 個參數
      • iterable:可迭代的 object
      • initialize:可選,初始參數
      Python 3.x reduce() 已經被移到 functools 模組裡,若要使用,需引入 functools 模組來調用 reduce() method
    • Code
      • from functools import reduce num = [1, 2, 3, 4, 5] def add(x, y): return x + y n = reduce(add, num) print(n)
    • Output
      • 15
  • lambda combined with reduce() method
    • Code
      • from functools import reduce num = [1, 2, 3, 4, 5] n = reduce(lambda x, y : x + y, num) print(n)
    • Output
      • 15

Combined with sorted() method

  • sorted() 描述
    • 對所有可迭代的 object 進行排序操作
  • sorted() 語法
    • sorted(iterable, key=None, reverse=False)
      • iterable:可迭代的 object
      • key:用來進行比較的元素,只有一個參數,具體函數的參數就是取自於可迭代 object 中,指定可迭代 object 中的一個元素來進行排序
      • reverse:排序規則
        • reverse=True:降序
        • reverse=False:升序(預設)
    • Code
      • student_lists = [ ['john', 'A', 15], ['jane', 'B', 12], ['dave', 'B', 10], ] n = sorted(student_lists) # 以人名進行排列 print(n)
    • Output
      • [['dave', 'B', 10], ['jane', 'B', 12], ['john', 'A', 15]]
  • lambda combined with sorted() method
    • Code
      • student_lists = [ ['john', 'A', 15], ['jane', 'B', 12], ['dave', 'B', 10], ] n = sorted(student_lists, key=lambda x : x[2]) # 以年齡進行排列 print(n)
    • Output
      • [['dave', 'B', 10], ['jane', 'B', 12], ['john', 'A', 15]]

lambda 函式與 def 函式差異

定義函式名稱
運算式
結果
lambda
不需要
只能有一行
自動回傳結果
def
需要
可以有多行
return 回傳結果

後記

會突然寫這篇技術文章的原因在於,之前讀其他人的 code 發現有使用到 lambda,但發現自己沒有認真了解 lambda 是什麼或是使用上的觀念 & 技巧。今天突然看到 這邊貼文 有介紹到 lambda,所以特別花了一些時間整理一下 lambda 的用法。
另外,我在整理筆記的時候,有滿多技術文章都有提到,雖然在 Python 內建函式中使用 lambda 很強大,適度的使用是可以讓 code 簡潔不少,不過也建議大家避免過度使用跟撰寫複雜的 lambda,可能會導致程式碼不易閱讀或不易維護的問題,所以,若是較複雜的邏輯運算式,建議還是先以 def 一般函式會是比較理想的選擇。
最後,在這裡推薦一個 Instagram 的帳號 @pythoncoder2.0,我自己是覺得他們常常會發一些有趣然後我不知道的黑魔法,然後也想說滑手機的同時如果也能吸收到一些知識也不錯,所以就追蹤了他們。