[Python基礎]Lambda匿名函式

更新於 發佈於 閱讀時間約 10 分鐘

[Python基礎]理解自定函式

有別於上一篇自定函式,如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。

本文將介紹,Lambda匿名函式的用法,也比較跟自定函式差異之處。

Lambda匿名函式語法

fun = lambda arguments: expression​
指定名稱 = 參數1,參數2,...: 運算式
  • lambda 是關鍵字。
  • arguments 是參數列表,可以是零個或多個參數。
  • expression 是一個單一的表達式,該運算式的計算結果將成為這個匿名函數的返回值。

程式範例

簡單的加法函式

用簡單的加法來比較匿名函式自定函式的差異,匿名函式一行就搞定了,也不用定義函式名稱。

add = lambda x, y: x + y

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

print(add(1,2)) # output 3
print(add_fun(1,2)) # output 3
導入1,2代入x,y返回x+y

導入1,2代入x,y返回x+y

計算平方的函式

square = lambda x: x**2

def calculate_square(x):
return x**2

print(square(4)) # output: 16
print(calculate_square(4)) # output: 16

進階用法

lambda 函數可以結合多種內建函數和標準庫函數,以應用於各種情境。


map 函式:

map 函式將一個函式應用於一個或多個可迭代對象的對應元素。 lambda 函數通常與 map 一起使用,尤其是對列表中的每個元素進行操作。

語法

map(function, iterable_1, iterable_2,...)
  • function : 函式
  • iterable : 一個或多個可迭代對象,例如list,dit,tuple,set。

計算平方的函式 + 列表輸入

結合lambda 函式一起使用,利用此方法,讓numbers每個元素都進入lambda 函式運算在返回列表。

lambda 函式 + Map函式

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 輸出: [1, 4, 9, 16, 25]
列表每個元素依序到函數算

列表每個元素依序到函數算

也可以將上方有出現過的自定函式範例套過來,一樣結合map函式來做應用。

有此範例就能明顯感受到兩者差異map結合匿名函式一行就看得清楚,是在做什麼,但結合自定函式,還要往上看自定函式是做什麼運算式

自定 函式 + Map函式

def calculate_square(x):
return x**2
numbers = [1, 2, 3, 4, 5]
squared = list(map(calculate_square, numbers))
print(squared) # 輸出: [1, 4, 9, 16, 25]

filter 函數:

filter函數用於過濾可迭代對象中的元素,返回滿足條件的元素列表。

語法

filter(function, , iterable_2,...)
  • function : 函式
  • iterable : 一個或多個可迭代對象,例如list,dit,tuple,set。

只取偶數+列表輸入

lambda 函式 + filter函式

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 輸出: [2, 4, 6, 8, 10]
  1. numbers中的元素,依序代入x
  2. 代入至運算式的x做運算,滿足餘除2等於0的狀況就將該值返回至even_numbers的list儲存
  3. 最後輸出[2, 4, 6, 8, 10]。
運算示意圖

運算示意圖

自定 函式 + filter函式

兩者的差異就在filter代入Funtion那參數改為自定函式或匿名函式。

匿名函式優點在簡潔,在大型專案中常見,這樣可避免一推自定函式跟函式名稱

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 輸出: [2, 4, 6, 8, 10]

# 對應的自定義函式
def is_even(x):
return x % 2 == 0

even_numbers_custom = list(filter(is_even, numbers))
print(even_numbers_custom) # 輸出: [2, 4, 6, 8, 10]

sorted 函數:

sorted 函數用於對可迭代對象進行排序。它返回一個新的已排序的列表,而不改變原始可迭代對象。

語法

sorted(iterable, key=None, reverse=False)
  • iterable: 要排序的可迭代對象,例如列表元組字典鍵或值等。
  • key(可選): 用於指定一個函數,該函數將應用於每個元素,並根據函數的結果進行排序。默認為 None,表示直接比較元素本身。
  • reverse(可選): 一個布爾值,表示是否按照降序排列。默認為 False,即升序排列

簡單排序:

默認為生序排列,由小排到大。

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
# 輸出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

降序排序:

reverse=True為降序,由大排到小。

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)
# 輸出: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

在字典上使用 key 進行排序:

key參數導入匿名函式

要先轉換成列表,才會有元素索引概念,才能去迭代整理。

grades = {'Alice': 90, 'Bob': 75, 'Charlie': 88, 'David': 92}
sorted_grades = sorted(grades.items(), key=lambda x: x[1], reverse=True)
print(sorted_grades)
# 輸出: [('David', 92), ('Alice', 90), ('Charlie', 88), ('Bob', 75)]

1. grades.items(): 將字典轉換為包含鍵-值對的元組列表,每個元組的形式為 (key, value)

2.grades.items() 返回的是一個類似 [('Alice', 90), ('Bob', 75), ('Charlie', 88), ('David', 92)] 的列表。當你對這個列表使用 sorted 函數時,你需要告訴它按照哪個鍵進行排序。這裡使用 key=lambda x: x[1],表示按照每個元組中的第二個元素(即成績)進行排序

  1. key=lambda x: x[1]: 使用 lambda 函數定義排序的鍵,這裡是使用每個元組的第二個元素(即成績)作為排序的依據。
  2. reverse=True: 指定降序排列。
  3. 並將排序後的結果賦值給 sorted_grades

使用 key 參數進行排序:

排序的依據是每個字典中 'age' 鍵對應的值,此範例已經是列表,所以不用像上面的範例去做轉換。

students = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 22},
{'name': 'Charlie', 'age': 28}
]

# 根據年齡升序排列
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)
# 輸出: [{'name': 'Bob', 'age': 22}, {'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 28}]
  1. 學生列表 students定義了一個列表,其中包含三個字典,每個字典表示一位學生,包含 'name' 'age' 兩個鍵。
  2. key=lambda x: x['age']: 使用 lambda 函數定義排序的鍵,目的是取出['age']的值讓sorted來排序。
  3. 將排序後的結果賦值給 sorted_students

圖中的1,2,3代表依sorted_students元素編號依序引入取出,正常元素編號為0開始,這裡為方便大家聯想,故由順序1開始。

依元素編號來做排序

依元素編號來做排序

注意key取出來的值是要使用整數浮點數或其他可比較型態

程式一定要練習打打看,或修改其參數試試,才能理解貫通


謝謝大家觀看~ 希望大家會喜歡,喜歡的話可以給愛心~追蹤一下,不會漏掉之後的文章喔~





留言
avatar-img
留言分享你的想法!
小松鼠-avatar-img
2024/01/23
讚讚 除了map, filter之外,reduce 也很適合搭配lambda
螃蟹_crab-avatar-img
發文者
2024/01/23
小松鼠 謝謝你的建議:)~ 其實我對lambda 也不是很熟,不常用 哈~ 就想說邊學邊把重點整理起來~
螃蟹_crab-avatar-img
發文者
2024/01/17
[Python基礎]串列運算式(List Comprehension)提及了這篇文章,趕快過去看看吧!
avatar-img
螃蟹_crab的沙龍
148會員
255內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
Thumbnail
先前學到自定函式的使用方法,那如果在一個很龐大的程式架構中發散了一推自定函式,有沒有辦法可以整理一下,讓程式結構整齊又簡潔呢? 可以使用裝飾器staticmethod 定義靜態方法,全部整理到一個類別去,想像成是一個工具箱的概念,工具箱就是類別,靜態方法就像是裡面的工具一樣。
Thumbnail
先前學到自定函式的使用方法,那如果在一個很龐大的程式架構中發散了一推自定函式,有沒有辦法可以整理一下,讓程式結構整齊又簡潔呢? 可以使用裝飾器staticmethod 定義靜態方法,全部整理到一個類別去,想像成是一個工具箱的概念,工具箱就是類別,靜態方法就像是裡面的工具一樣。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News