Python lambda 運算式用法與範例

本篇介紹 Python 的 lambda 運算式的用法教學,並附上常見的範例,匿名函數就是指一個沒有名稱的函數,學會 lambda 可以將原 Python 程式改寫成簡短,另一方面是也看得懂別人寫的 lambda。

以下 Python lambda 教學內容將分為以下幾部分,

  • Python lambda 的基本使用範例
  • Python 函數的回傳值也可以直接回傳 lambda 運算式
  • 在 tkinter/PyQt 裡使用 lambda 的實際例子

那我們就開始吧!

Python lambda 的基本使用範例

Python 中 lambda 的用法如下,

1
lambda arg1, arg2, ... : expression

範例 1-1. add
add 是兩數相加的函式,帶入兩個數字,回傳相加後的結果。
程式碼如下:

python-lambda-add1.py
1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

add = lambda x, y: x + y
print(add(1, 2))
print(add(3, 5))
print(add)

輸出如下:

1
2
3
3
8
<function <lambda> at 0x7fada83b1f28>

範例 1-2. pow
pow 是次方的函式,帶入數值後回傳 x 的 y 次方後的結果。
其中 ** 是次方運算子 power operator
簡單說 2**3 等價於 2*2*2
程式碼如下:

python-lambda-pow1.py
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

pow = lambda x, y: x ** y
print(pow(2, 2))
print(pow(2, 4))
print(pow(5, 2))
print(pow(5, 3))
print(pow)

輸出如下:

1
2
3
4
5
4
16
25
125
<function <lambda> at 0x7f1820cc2730>

範例 1-3. max
max 是回傳兩數字最大的數字,
這邊使用了 python 三元運算子的技巧,可以看看之前 Python 的三元運算子 ternary operator 的介紹
程式碼如下:

python-lambda-max1.py
1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

max = lambda x, y: x if x > y else y
print(max(1, 2))
print(max(3, 5))
print(max)

輸出如下:

1
2
3
2
5
<function <lambda> at 0x7f1eaa90ef28>

Python 函數的回傳值也可以直接回傳 lambda 運算式

範例 2-1. add

python-lambda-add2.py
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def aaa():
return lambda x, y: x + y

add = aaa()
print(add(1, 2))
print(add(3, 5))
print(add)

輸出如下:

1
2
3
3
8
<function aaa.<locals>.<lambda> at 0x7fa52255e730>

範例 2-2. pow

python-lambda-pow2.py
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def aaa():
return lambda x, y: x ** y

pow = aaa()
print(pow(2, 2))
print(pow(2, 4))
print(pow(5, 2))
print(pow(5, 3))
print(pow)

輸出如下:

1
2
3
4
5
4
16
25
125
<function aaa.<locals>.<lambda> at 0x7fcdf4146730>

範例 2-3. max

python-lambda-max2.py
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def aaa():
return lambda x, y: x if x > y else y

max = aaa()
print(max(1, 2))
print(max(3, 5))
print(max)

輸出如下:

1
2
3
2
5
<function aaa.<locals>.<lambda> at 0x7f0a2f7e6730>

在 tkinter/PyQt 裡使用 lambda 的實際例子

在 GUI 程式中常常有一些 UI 元件的互動操作,例如某事件完成後只是想要將 UI 改變個文字,或是只是想要將 UI 改變狀態,這種只要一行就可以完成的程式碼,但不想額外為了這一行建立一個函式的話,就可以考慮使用 lambda 的技巧來完成。

我們來看看在 tkinter 裡使用 lambda 的實際例子,如下例 tkinter 中處理按鈕事件的 button_event 函式裡只有僅僅一行程式碼,很單純地只是改變按鈕的文字而已,這種情形就可以換成 lambda 的寫法,

1
2
3
4
5
def button_event():
mybutton.config(text='hello world')

mybutton = tk.Button(root, text='button', command=button_event)
mybutton.pack()

改成 lambda 寫法以後,就可以移除 button_event 這個函式了,將原本 button_event 函式裡的程式碼放在 lambda 運算式裡,這樣就是個運用 lamdba 好時機的例子,

1
2
3
4
5
6
7
# def button_event():
# mybutton.config(text='hello world')

mybutton = tk.Button(root, text='button',
command=lambda: mybutton.config(text='hello world')
)
mybutton.pack()

詳細範例可以看看 Python tkinter Button 按鈕用法與範例這篇,

接著我們來看看在 PyQt5 裡使用 lambda 的實際例子,下例 PyQt5 處理按鈕事件中的 onButtonClick 函式裡也一樣只有僅僅一行程式碼,僅僅只是改變按鈕文字而已,這也可以寫成 lambda 來精簡程式碼,

1
2
3
4
5
6
7
def initUI(self):
# ...
self.mybutton = QPushButton('button', self)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
self.mybutton.setText('hello world')

改寫 lambda 後變成這樣,將原本在 onButtonClick 的程式碼搬到 lambda 運算式裡,這樣就可以把 onButtonClick 函式給移除了,

1
2
3
4
5
6
7
8
9
10
def initUI(self):
# ...
self.mybutton = QPushButton('button', self)
# self.mybutton.clicked.connect(self.onButtonClick)
self.mybutton.clicked.connect(
lambda: self.mybutton.setText('hello world')
)

# def onButtonClick(self):
# self.mybutton.setText('hello world')

詳細範例可以看看 Python PyQt5 QPushButton 按鈕用法與範例這篇,
在某些狀況下 lambda 就變成很好使用的技巧,程式撰寫也比較快速,程式碼也比較精簡,要不要使用 lambda 取決於當下的情況,不一定改用 lambda 運算式就一定好,需要自己評估衡量。

以上就是 Python lambda 運算式用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
lambda 運算式
https://openhome.cc/Gossip/Python/LambdaExpression.html
Python 速查手冊 - 3.9 lambda 運算
http://kaiching.org/pydoing/py/python-lambda.html
Python Lambda
https://www.w3schools.com/python/python_lambda.asp
Python進階技巧 (4) — Lambda Function 與 Closure 之謎! - 整個程式都是我的咖啡館 - Medium
https://medium.com/citycoddee/python%E9%80%B2%E9%9A%8E%E6%8A%80%E5%B7%A7-4-lambda-function-%E8%88%87-closure-%E4%B9%8B%E8%AC%8E-7a385a35e1d8
Falldog的程式戰場: [Python] lambda簡介
http://falldog7.blogspot.com/2009/07/python-lambda.html

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python 新手入門教學懶人包
Python 讀取 txt 文字檔
Python 讀取 csv 檔案
Python 寫入 csv 檔案
Python str 字串用法與範例
Python list 串列用法與範例
Python set 集合用法與範例
Python dict 字典用法與範例
Python tuple 元組用法與範例
Python 字串分割 split
Python 取代字元或取代字串 replace
Python 讓程式 sleep 延遲暫停時間
Python 產生 random 隨機不重複的數字 list
Python PyAutoGUI 使用教學
Python OpenCV resize 圖片縮放