[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
131會員
218內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
有別於上一篇for迴圈[Python基礎]流程控制for迴圈,while迴圈則常常被說是無限迴圈,若未到達跳脫的條件,是不會停止的。 在日常生活中,我們也常常用到這個概念,例如泡奶粉,要一直攪拌到粉都溶解了為止,其中的一直跟為止就等於while迴圈概念一樣,一直做到某個條件滿足了被觸發才停止。
在日常中,常有重複性相當高的事情,不斷地重複在做,重複的事做久就會慢慢變成是一個習慣,這個習慣就會讓人下意識地完成一些事情。 習慣是一種自動化的行為模式,這些行為模式在重複進行的過程中變得固定且容易自動化。 在Python程式語言中,for迴圈就類似這種概念
在人生中總是會遇到許多選擇,做了不同的選擇產生的結果也會不一樣,大多時候都是在為了要吃什麼在抉擇,小孩才做選擇大人全部都要,全部都要何嘗也不是一個選擇。 在Python程式語言中也有選擇的語法,就是If Else,如果是就做什麼,不是就做什麼,有別於其他程式語言,他不一定要有else,可以只有If
在日常中我們都會將很多事物定上了一個標籤,例如將商品標記價格,替孩子取姓名,公司上冠上職稱等等。 在Python中也有這種方法,就是字典的形式{ 'name' : 'crab', 'apple', 1000 }去呈現
列表(List)和元組(Tuple)都是 Python 中用來存儲集合元素的數據結構,兩者看起來很像,在初學時很容易搞混,所以觀念要建立好。 可以把列表(List)和元組(Tuple)想像成是一個容器,什麼元素都可以塞
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
有別於上一篇for迴圈[Python基礎]流程控制for迴圈,while迴圈則常常被說是無限迴圈,若未到達跳脫的條件,是不會停止的。 在日常生活中,我們也常常用到這個概念,例如泡奶粉,要一直攪拌到粉都溶解了為止,其中的一直跟為止就等於while迴圈概念一樣,一直做到某個條件滿足了被觸發才停止。
在日常中,常有重複性相當高的事情,不斷地重複在做,重複的事做久就會慢慢變成是一個習慣,這個習慣就會讓人下意識地完成一些事情。 習慣是一種自動化的行為模式,這些行為模式在重複進行的過程中變得固定且容易自動化。 在Python程式語言中,for迴圈就類似這種概念
在人生中總是會遇到許多選擇,做了不同的選擇產生的結果也會不一樣,大多時候都是在為了要吃什麼在抉擇,小孩才做選擇大人全部都要,全部都要何嘗也不是一個選擇。 在Python程式語言中也有選擇的語法,就是If Else,如果是就做什麼,不是就做什麼,有別於其他程式語言,他不一定要有else,可以只有If
在日常中我們都會將很多事物定上了一個標籤,例如將商品標記價格,替孩子取姓名,公司上冠上職稱等等。 在Python中也有這種方法,就是字典的形式{ 'name' : 'crab', 'apple', 1000 }去呈現
列表(List)和元組(Tuple)都是 Python 中用來存儲集合元素的數據結構,兩者看起來很像,在初學時很容易搞混,所以觀念要建立好。 可以把列表(List)和元組(Tuple)想像成是一個容器,什麼元素都可以塞
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
讀取ini配置文件時如果某個參數不存在,它就會報錯,要怎麼避免呢? 可以使用fallback 參數來指定預設值。 這樣即使配置文件中缺少一些參數,我們的程序也能正常運行並使用預設值。 讓我們來假設一個案例做說明: 先故意將先前範例的port的資料刪掉。
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
※ 函式進階介紹: 箭頭函式: 箭頭函式相比於一般函式,語法相當簡潔。除了少去 function 關鍵字,如果只有一個參數,箭頭函式可以省略括號;只有一行程式碼,就是直接簡單返回一個變數或簡單的表達式,可以省略大括號和 return。例子如下: //一般函式計算平方用的寫法 const squ
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
讀取ini配置文件時如果某個參數不存在,它就會報錯,要怎麼避免呢? 可以使用fallback 參數來指定預設值。 這樣即使配置文件中缺少一些參數,我們的程序也能正常運行並使用預設值。 讓我們來假設一個案例做說明: 先故意將先前範例的port的資料刪掉。
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
※ 函式進階介紹: 箭頭函式: 箭頭函式相比於一般函式,語法相當簡潔。除了少去 function 關鍵字,如果只有一個參數,箭頭函式可以省略括號;只有一行程式碼,就是直接簡單返回一個變數或簡單的表達式,可以省略大括號和 return。例子如下: //一般函式計算平方用的寫法 const squ