前言
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)
- 結果
「lambda」寫法
add = lambda a, b: a+b
a=10
b=20
c=add(a, b)
print(c)
- 結果
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】lambda 與 def function 使用方法與比較整理(內含範例程式碼) […]
[…] 【Python】lambda 與 def function 使用方法與比較整理(內含範例程式碼) […]