關鍵字 (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 的參數同樣會被代入 lambda 的 x 中
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 以整數 12 的 lambda 運算式回傳值,往後 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] |
$ |
相關教學影片