6. 用「**」接收多個keyword引數
用「**」接收不定個數的keyword引數時,指定的「參數名稱」及「值」會以「鍵」(key)及「值」(value)的型態包裝成字典(dict)。
以下是一個例子:
假設每一張訂單可以買多杯不同的飲料,並且指定每種飲料的杯數。
def total(**amount):
'''回傳購買金額'''
price = {'冬瓜檸檬':55, '冬瓜青茶':50, '柳橙原汁':65, '四季春拿鐵':85, '茉香綠茶':65, '日月潭紅茶':80, '抹茶拿鐵':75, '黑糖珍珠鮮奶':75, '芒果青茶':65, '鳳梨牛奶':70}
tot = 0
for key in amount:
tot += price[key] * amount[key]
return tot
在第1行,用**amount接收多個指定參數的引數值,其指定的參數名稱及值將以dict的型態儲存。
呼叫函式:
print(f'{total(冬瓜檸檬=1, 四季春拿鐵=2):,}元')
print(f'{total(茉香綠茶=1, 日月潭紅茶=2, 黑糖珍珠鮮奶=3):,}元')
在第1行,指定將值「1」傳給參數「冬瓜檸檬」;將值「2」傳給參數「四季春拿鐵」。
執行結果:
225元 450元
說明:

問題:
撰寫一個函式,名稱是total,可回傳「總共得到的學分數」。它接收不定個數的科目成績資料,寫在引數的每個科目成績以「科目名稱=分數」表示。假設只有國文、英文、數學、程式等4門課及格時各可得3學分,其他科目不論及格與否都不算學分。請計算並回傳傳入資料共得到多少學分數,。
測試範例:
total(國文=60, 英文=55, 地理=80) -> 3 total(英文=60, 數學=85, 程式=95, 歷史=100) -> 9