Python 速查手冊

3.9 lambda 運算

關鍵字 (keyword) lambda 是種將運算式 (expression) 重複運用的方式,類似函數 (function) ,卻又不像函數需要額外命名函數的識別字 (identifier) ,因此又被稱為無名函數,基本上 lambda 運算式就是函數的簡化,因此某些需要函數的場合可以用 lambda 運算式代替

先來看看 lambda 的簡單例子,關鍵字 lambda 後面空一格,接上需要使用的變數 (variable) 名稱,變數名稱可以自訂,這裡用英文小寫字母 x ,然後加上冒號,後面接上運算式,這裡把 lambda 運算式指派給變數 a ,最後兩行直接用 a 進行計算,其中參數 (parameter) 會代入 x

a = lambda x: x ** 5 + 2
print(a)
print(a(2))
print(a(12))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:lambda01.py
# 功能:示範 lambda 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 lambda01.py
<function <lambda> at 0x101ebb620>
34
248834
$

函數的回傳值 (return value) 可以直接回傳 lambda 運算式,注意這裡 c 的參數同樣會被代入 lambdax

def b():
    return lambda x: x + 2

c = b()
print(c)
print(c(18))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:lambda02.py
# 功能:示範 lambda 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 lambda02.py
<function b.<locals>.<lambda< at 0x1038bb6a8>
20
$

下面函數 c 的參數 n 只會在函數定義內發生作用,因此下面繼續用變數 d 取得函數 c 以整數 12lambda 運算式回傳值,往後 d 的參數只會代入 lambda 運算式中的 x

def c(n):
    return lambda x: x + n

d = c(12)
print(d(5))
print(d(18))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:lambda03.py
# 功能:示範 lambda 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 lambda03.py
17
30
$

lambda 運算式最常用到的就是需要函數當參數的地方,例如內建函數 (built-in function) filter() 利用設定好的條件過濾序列 (sequence) 中的元素,所謂設定好的條件就是指函數,這邊可以用 lambda 運算式代入, filter() 的第一個參數就是 lambda 運算式,結果會把串列 (list) e 中大於 10 的元素放到串列 f

e = [1, 7, 13, 19, 25]
f = []
for i in filter(lambda x: x > 10, e):
    f.append(i)
print(f)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:lambda04.py
# 功能:示範 lambda 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python4 lambda04.py
[13, 19, 25]
$

另一個內建函數 map() 則是把序列中的元素做相對應的處理,處理方式也就是函數,此例也是用 lambda 運算式代入,同樣 map() 的第一個參數就是 lambda 運算式,結果會把串列 g 中的元素乘以 2 再加 10 ,最後放在串列 h

g = [3, 1, 89, 22, 13]
h = []
for i in map(lambda x: x * 2 + 10, g):
    h.append(i)
print(h)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:lambda05.py
# 功能:示範 lambda 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python4 lambda05.py
[16, 12, 188, 54, 36]
$

相關教學影片

上一頁: 3.8 in 運算
Python 速查手冊 - 目錄
下一頁: 3.10 yield 運算
回 Python 教材首頁
回程式語言教材首頁