[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
128會員
213內容數
本業是影像辨識軟體開發,閒暇時間進修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
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
喜特先生發佈了一系列介紹 LAMBDA 的文章,我把它們都統整在這了!你可以從頭開始學習,也可以找你有興趣的函式開始學習唷。 LAMBDA 函式(一):基本原理 介紹了 Google 試算表在 2022 年推出的 LAMBDA 函式和其輔助函式,以及如何在試算表中使用它們。LAMBDA
※ 函式進階介紹: 箭頭函式: 箭頭函式相比於一般函式,語法相當簡潔。除了少去 function 關鍵字,如果只有一個參數,箭頭函式可以省略括號;只有一行程式碼,就是直接簡單返回一個變數或簡單的表達式,可以省略大括號和 return。例子如下: //一般函式計算平方用的寫法 const squ
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
Google 試算表在 2022 年隆重推出了 LAMBDA 函式跟它的輔助函式,讓使用者可以製作自己的函式,還可以在指定範圍內做複雜的運算。LAMBDA 的出現,讓我們在試算表的資料處理能力帶來了革命性的進步,可以更輕鬆地完成複雜的工作!一起來看看。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
喜特先生發佈了一系列介紹 LAMBDA 的文章,我把它們都統整在這了!你可以從頭開始學習,也可以找你有興趣的函式開始學習唷。 LAMBDA 函式(一):基本原理 介紹了 Google 試算表在 2022 年推出的 LAMBDA 函式和其輔助函式,以及如何在試算表中使用它們。LAMBDA
※ 函式進階介紹: 箭頭函式: 箭頭函式相比於一般函式,語法相當簡潔。除了少去 function 關鍵字,如果只有一個參數,箭頭函式可以省略括號;只有一行程式碼,就是直接簡單返回一個變數或簡單的表達式,可以省略大括號和 return。例子如下: //一般函式計算平方用的寫法 const squ
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
Google 試算表在 2022 年隆重推出了 LAMBDA 函式跟它的輔助函式,讓使用者可以製作自己的函式,還可以在指定範圍內做複雜的運算。LAMBDA 的出現,讓我們在試算表的資料處理能力帶來了革命性的進步,可以更輕鬆地完成複雜的工作!一起來看看。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。