分類

展開全部 | 收合全部

分類

展開全部 | 收合全部

【Python 進階語法 #2】lambda 與 def function 使用方法與比較整理(內含範例程式碼)

前言

python 中有個指令為「lambda」,
中文我們習慣稱呼為「匿名函數」,
當我們的函數功能很小 (例如:一行就可以寫完的那種),
不想要另外進行 def 的宣告時,
我們就可以使用 lambda 的方法完成一個快速的 function,

「lambda」 與 「def function – return」的方法是互通的,
而 lambda 的使用情境更像是為了快速實作而寫,
我們就不需要再花時間去寫 「def function – return」

比較 & 範例程式碼

一般的 「def function – return」 寫法

def add(a, b):
    return a+b

a=10
b=20
c=add(a, b)
print(c)
  • 結果

python-lambda-1

「lambda」寫法

add = lambda a, b: a+b

a=10
b=20
c=add(a, b)
print(c)
  • 結果

python-lambda-1

lambda 說明

我之前也是 lambda 學不太好的人XDD,
透過這次整理把 lambda 整個整理清楚了!

在閱讀一個 lambda function 時,先把「lambda」、「=」、「:」抓出來

例如下面的例子,
我們把「lambda」、「=」、「:」抓出來後,

剩下的大致可以分為三個部份,

  • 「=」前面的:「function name
  • 「lambda」之後緊接的:「input value
  • 「:」之後的:為「return value (output value)
add = lambda a, b: a+b

依照上面的邏輯,我們分析後可以得到:

  • 「=」前面的:「function name
    • 此處為 add
  • 「lambda」之後緊接的:「input value
    • 此處為 a, b
  • 「:」之後的:為「return value (output value)
    • 此處為 a+b

這樣大家看懂了嗎XD

對照一下正常的使用一般 「def function – return」 寫法

def add(a, b):
    return a+b

建議讀者自行練習一下,練久了自然就會懂這怎麼用了XD

稍微變化一下用法,lambda 結合一行「if-else」

範例程式碼

test = lambda a, b: a-b if a>b else a+b

a=10
b=20

print(test(a,b))
print(test(b,a))

執行結果

分析

一樣我們先把這行程式碼拆成 3 個 part:

  • 「=」前面的:「function name
    • 此處為 test
  • 「lambda」之後緊接的:「input value
    • 此處為 a, b
  • 「:」之後的:為「return value (output value)
    • 此處為 a-b if a>b else a+b

而一行 「if-else」的用法:

簡單來說就是: [if True 的結果] if [判斷式] else [else 的結果]

所以換個寫法,我們可以知道我們這裡寫的是:

if a>b:
    return a-b
else
    return a+b

仔細推論一下,就知道我們的輸出是正確的囉!

  • 詳細可以參考我的另外一篇文章:

【Python 基礎語法 #3】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)

稍微變化一下用法,lambda 結合一行「for-loop」

範例程式碼

test = lambda x: [i for i in range(x)]

a = 10
for i in test(a):
    print(i)

執行結果

你可能也會想問? 為什麼不直接 print?

範例程式碼

當然也是可以的!請見以下作法 (但並不推薦這樣使用)

test = lambda x: [print(i) for i in range(x)]

a = 10
test(a)

執行結果

說明 & 不推薦這樣使用的原因

  • 不推薦的原因1:

這邊是使用了 list 的宣告完成 for-loop 並印出值,
但其實我們並不想要特別去宣告這個 list,
例如下面,如果我們寫「print(test(a))」,會得到一串 None,
實際上我覺得這會讓我們的程式邏輯看起來很怪 (雖然有達到了目的)。

  • 不推薦的原因2:

for 本身是個 statement,「statement in list」的用法是正確的。
但是問題就出在這個「list」,這並不是我們預期想要的東西,
只能說他達到了我們要的目的,但多做了一些額外的事情。

Reference

https://www.runoob.com/python/python-functions.html
https://stackoverflow.com/questions/23896199/python-loop-for-inside-lambda
https://www.tutorialspoint.com/How-to-create-a-lambda-inside-a-Python-loop
https://realpython.com/python-lambda/
https://stackoverflow.com/questions/35238409/how-to-write-a-lambda-with-a-for-loop-in-it

⭐Python 基礎用法 相關文章整理⭐:
1.【Python】python list 清除, 移除內容元素 remove, pop, del, clear相關用法整理 sample code (內含範例程式碼)
2.【Python】寫模組 module、package 總整理 Importing files from different folder
3.【Python】python assert (斷言) 用法 sample code (內含範例程式碼)
4.【Python】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)
5.【Python】lambda 與 def function 使用方法與比較整理(內含範例程式碼)
6.【Python】python map 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
7.【Python】python zip 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
⭐Python 字串處理 相關文章整理⭐:
1.【Python】python print 變數的值 & 變數名稱 方法總整理
2.【Python】python string format str.format 總整理
⭐Python 檔案處理 相關文章整理⭐:
1.【Python】python 開關檔範例 與 程式模板 with open / file open sample code
2.【Python】取出檔案名稱 (含副檔名、不含副檔名) os path basename split 取出 檔名 路徑 不要副檔名 sample code
3.【Python】在 python 中利用 os.chmod 更改檔案的權限 chmod 777
4.【Python】利用 shutil 來複製檔案 shutil copy file
5.【Python】python 建立資料夾範例 mkdir os.makedirs() sample code
6.【Python】python 移除資料夾範例 rmdir shutil.rmtree() sample code
7.【Python】確認檔案是否存在 os.path.isfile / 確認資料夾是否存在 os.path.isdir sample code is folder / file exist
⭐Python 系統偵測 相關文章整理⭐:
1.【Python】python pyinotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
2.【Python】python 利用 argparse 使程式執行時可帶參數 (內附範例程式碼) sample code
⭐Python 平行運算 相關文章整理⭐:
1.【Python】threading – 建立多執行緒來執行程式 (內含範例程式碼) sample code
2.【Python】multiprocessing – 01 | 用多核心來執行程式 (內含範例程式碼) sample code
3.【Python】multiprocessing – 02 | pool, map, apply_async – 用多核心來執行程式並取得結果 (內含範例程式碼) sample code
4.【Python】python thread multiprocess 比較總整理
5.【Python】python pooling multiprocess – 用多核心來執行程式 sample code (內含範例程式碼)
⭐Python 測試程式 相關文章整理⭐:
1.【Python】python 測試程式 – 利用 doctest 測試 python testcase 的優雅寫法,適用於 leetcode (doctest in function,搭配 function 的用法)
2.【Leetcode】python – 利用 doctest 測試 leetcode python testcase 的優雅寫法 (doctest in class,搭配 class 的用法)
⭐Python Chatbot 相關文章整理⭐:
1.【Chatbot】(全圖文說明) LINE Developers bot 機器人註冊與設定
2.【Chatbot】(全圖文說明) ngrok 本地伺服器設定方法 – LINE bot local server
3.【Chatbot】Dialogflow API 串接 python 的方法 (內含範例程式碼)
4.【Chatbot】[講義分享] 手把手實作line機器人 (linebot API 運用)
⭐Python Google Colab (Colaboratory) 相關文章整理⭐:
1.【Colab】Python colab 上傳檔案的方法 (內含範例程式碼) upload files
2.【Colab】Python colab 連接 google 雲端硬碟取用資料 (內含範例程式碼) mount google drive
⭐Python 其他筆記 相關文章整理⭐:
1.【Python】anaconda 更新 (upgrade) python 3.8 版本筆記
2.【Sublime】Sublime 將縮排 “tab” 改成 4格空白 的方法 (圖文說明) sublime indent 4 spaces
3.【Sublime】Python 縮排小技巧 (很爛但實用) 快速將 tab 改成「4格空白」的方法
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps
Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「?只寫到一半?」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好?

文章: 883

2 則留言

★留個言吧!內容有誤或想要補充也歡迎與我討論!