Python 簡易手冊

單元 30 - lambda 陳述

關鍵字 (keyword) lambda 用來定義無名函數 (anonymous function) ,也就是沒有函數名稱的函數 (function) ,因為沒有函數識別字 (identifier) ,所以要用其他的識別字來代替,例如將 lambda 指派給變數,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 定義匿名函數
po2 = lambda x: 2 ** x

# 呼叫匿名函數
print(po2(10))
print(po2(20))
print(po2(30))

# 檔名: lambda_demo.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

lambda 後面接上參數列 (parameter list) ,然後是冒號,冒號後面就是依參數 (parameter) 計算的運算式 (expression) ,因此底下是用變數加上小括弧與引數 (argument) 進行呼叫,此例 po2 計算 2 的次方,執行結果如下

> python lambda_demo.py
1024
1048576
1073741824
>

** 為計算指數的運算子 (operator) ,其為算術運算子 (arithmetic operator]) 之一,單元 12 - 算術運算子介紹算術運算子。

由於 lambda 通常只用作單行,所以常是簡單的運算式,像是用作呼叫函數需要以函數當引數的替代,例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 建立含有多個序對的串列資料
a = [(2,1), (6,3), (3,8), (5,4)]

# 印出變數 a
print(a)

# 對序對的第一筆資料排序
b = sorted(a, key=lambda x:x[0])
print(b)

# 對序對的第二筆資料排序
c = sorted(a, key=lambda x:x[1])
print(c)

# 檔名: lambda_demo2.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

第 2 行先建立多個序對 (tuple) 的串列 (list) 資料變數 a

 1
 2
# 建立含有多個序對的串列資料
a = [(2,1), (6,3), (3,8), (5,4)]

單元 38 - 序對與 Range會介紹序對,單元 39 - 串列會介紹串列,單元 44 - 函數與 return 陳述會介紹如何定義函數。

然後第 8 行,變數 a 是內建函數 (built-in function) sorted() 的第一個引數,由於 sorted() 用來排序,第二個關鍵字引數 (keyword argument) key 需要提供排序依據的函數

 7
 8
 9
# 對序對的第一筆資料排序
b = sorted(a, key=lambda x:x[0])
print(b)

單元 45 - 位置引數與關鍵字引數會介紹如何定義關鍵字引數。

這裡的 lambda x: x[0] ,意思是 sorted() 會逐一取得 a 的元素 (element) ,每個元素以 x 代替,然後以 x[0] 也就是 x 索引值為 0 的元素進行排序,底下第 12 行則是改以 x[1] 排序

11
12
13
# 對序對的第二筆資料排序
c = sorted(a, key=lambda x:x[1])
print(c)

此例執行結果如下

> python lambda_demo2.py
[(2, 1), (6, 3), (3, 8), (5, 4)]
[(2, 1), (3, 8), (5, 4), (6, 3)]
[(2, 1), (6, 3), (5, 4), (3, 8)]
>

參考資料

上一頁 單元 29 - assert 陳述
回 Python 簡易手冊 首頁
下一頁 單元 31 - type 陳述
回 Python 教材首頁
回程式語言教材首頁