在處理python的序列資料(tuple, list)或是映射資料(dict),並要把資料傳入function時,可使用*和**運算符來分別對兩種資料作unpacking並傳入函式
針對序列(tuple, list)可以使用拆開序列運算符(sequence unpacking operator),在變數前加上*前綴來達成
1 | def product(a, b, c): |
上面的範列product函式會接受3個引數,透過*來直接對序列作unpacking,就能將序列內的資料項直接傳入函式,而不用先讀出來或是對序列作切片(slice)
針對映射資料(dict)則是使用拆開映射運算符(mapping unpacking operator),在變數前加上**前綴
1 | D = {'a': 2, 'b': 5, 'c': 10} |
上面範例會將dic以key-value拆開,在傳入函式後會將每個key的value分配給與key相同名稱的參數(parameter)。要注意的是,如果字典裡面的key和函式參數對應不起來,則會引發TypeError。
除非函式的參數有設定預設值(Default),例如以下範例函式參數d有預計值20,若字典沒有d,d在函式中就會帶入預設值而不會引發TypeError
1 | def product(a, b, c, d=20): |
參考資料:
函式參數預設值請參考: 位置引數(Positional Argument)與關鍵字引數(Keyword Argument)
Python docs - unpacking argument lists