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)]