[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取出來的值是要使用整數浮點數或其他可比較型態

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


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





119會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
Dictionary(字典) : 是一個可以用來存放不同資料(不同型態)的容器(集合) 每一個元素都是以{鍵(Key):值(Value)}所構成,字典中每個項目都是用","隔開
Thumbnail
在如今的資訊時代,如何有效的獲取並處理數據,成為了許多專業人士和企業的重要需求,爬蟲技術,作為獲取網絡數據的重要工具,其重要性不言而喻,而這篇文章將分享Python爬蟲的基礎,讓你能獲取想要的網頁數據。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
Thumbnail
每個人都有自己檢視個股好壞的方式,但總是希望每次在查詢時,如果能一鍵就檢視完成那該有多好。今天我們就來學習如何製作一份地雷股檢視圖,學會後就能夠如法炮製,製作自己的一鍵檢視清單,不用再上網依靠其他網站手動檢查,可以省下一大段時間,又能及時了解要投資的個股好壞,以便能適時做出買賣決策
Thumbnail
在先前的教學中,我都教大家程式寫完以後就架設到「Heroku」的雲端上做使用,但如果你想嘗試其他自創的功能,這時一定會需要一直Debug,如果每次想看結果都要部屬一次Heroku,那這樣就變得相當麻煩,所以今天我就教大家如何利用本機端來提供外網連接的方式吧!!
Thumbnail
「VSCode 是世上最棒的 IDE 了吧」這時有人跳出來表示不服,定睛一看原來是那陳年的大哥 Visual Studio,他說道:「用 Windows 做開發的人一定要裝 Visual Studio 這樣專業的 IDE,不要裝其他次等的文字編輯器,才可以有效提升專業度。」
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
Dictionary(字典) : 是一個可以用來存放不同資料(不同型態)的容器(集合) 每一個元素都是以{鍵(Key):值(Value)}所構成,字典中每個項目都是用","隔開
Thumbnail
在如今的資訊時代,如何有效的獲取並處理數據,成為了許多專業人士和企業的重要需求,爬蟲技術,作為獲取網絡數據的重要工具,其重要性不言而喻,而這篇文章將分享Python爬蟲的基礎,讓你能獲取想要的網頁數據。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
Thumbnail
每個人都有自己檢視個股好壞的方式,但總是希望每次在查詢時,如果能一鍵就檢視完成那該有多好。今天我們就來學習如何製作一份地雷股檢視圖,學會後就能夠如法炮製,製作自己的一鍵檢視清單,不用再上網依靠其他網站手動檢查,可以省下一大段時間,又能及時了解要投資的個股好壞,以便能適時做出買賣決策
Thumbnail
在先前的教學中,我都教大家程式寫完以後就架設到「Heroku」的雲端上做使用,但如果你想嘗試其他自創的功能,這時一定會需要一直Debug,如果每次想看結果都要部屬一次Heroku,那這樣就變得相當麻煩,所以今天我就教大家如何利用本機端來提供外網連接的方式吧!!
Thumbnail
「VSCode 是世上最棒的 IDE 了吧」這時有人跳出來表示不服,定睛一看原來是那陳年的大哥 Visual Studio,他說道:「用 Windows 做開發的人一定要裝 Visual Studio 這樣專業的 IDE,不要裝其他次等的文字編輯器,才可以有效提升專業度。」
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的