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)] |
> |
參考資料
- https://docs.python.org/3/reference/expressions.html#lambda
- https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions