10. 使用lamba函式
(1) 用def宣告的bmi()函式
以下是一個例子:
def bmi(height, weight):
return weight / (height/100)**2
這個函式宣告了名稱是bmi,傳入2個參數,內容沒有if指令,也沒有迴圈,只有一行將要回傳的計算結果。
呼叫函式:
print(f'{bmi(170, 55):.2f}')
執行結果:
19.03
(2) 將以上的程式改寫成lambda函式
以下是一個例子:
bmi = lambda height, weight: weight / (height/100)**2
第1行,先建立一個匿名函式物件,再將該物件的位址交給bmi這個變數,所以bmi是一個指向函式的參照,也可以用bmi來呼叫函式。
呼叫函式:
print(f'{bmi(170, 55):.2f}')
執行結果:
19.03
說明:

(3) 將lambda函式用在「排序」中
以下是一個例子:
data = [(80, 90, 100), (70, 60, 90), (55, 85, 65), (100, 70, 70)]
data.sort(key=lambda x:x[1], reverse=True)
print(data)
執行結果:
[(80, 90, 100), (55, 85, 65), (100, 70, 70), (70, 60, 90)]
說明:

(4) 用文字的長度排序
以下是一個例子:
data = ['Malaysia', 'Taiwan', 'Japan', 'Thailand', 'Korea']
data.sort(key=lambda x:len(x))
print(data)
執行結果:
['Japan', 'Korea', 'Taiwan', 'Malaysia', 'Thailand']
說明:

問題1:
寫一個lambda函式,並且讓diff變數指向該函式。假設該函式可傳入不定個數的數字,並且回傳最大及最小參數值的差距。
測試主程式:
print(diff(20, 10, 30))
print(diff(10, 20, 30, -100))
測試結果範例:
20 130
問題2:
假設資料如後, [(80, 90, 100), (70, 60, 90), (55, 85, 65), (100, 70, 70)],每項資料包括3個成績。請依各項資料的3個成績總和排序,由大至小排。
測試結果範例:
[(80, 90, 100), (100, 70, 70), (70, 60, 90), (55, 85, 65)]