*args 和 **kwargs 主要用於函數定義。
當我們不確定往一個函數中傳入多少參數,或者希望以元組(tuple)或者列表(list)的形式傳參數的時候,我們可以使用*args;當我們不知道往函數中傳遞多少個關鍵詞參數或者想傳入字典作爲關鍵詞參數的時候我們可以使用**kwargs(args、kwargs兩個標識符是通俗的命名約定,可以但不建議修改)。
*args開頭的一個星號*把序列或者集合解包(unpack)成位置參數,**kwargs開頭的兩個星號**把字典解包成關鍵詞參數。
下面使用了可變參數*args實現對不定數量的數字求和:
def get_sum(*args):
count = 0
for num in args:
count += num
print(count)
get_sum(1, 1) # 2
get_sum(1, 1, 2, 2) # 6
nums = [1,2,3] # 創建1個列表使用*解包再傳入參數
get_sum(*nums) # 6
下面測試了關鍵字參數**kwargs:
def test_kwargs(**kwargs):
print(kwargs)
test_kwargs(name='trophy') #{'name': 'trophy'}
test_kwargs(name='trophy', age=22) #{'name': 'trophy', 'age': 22}
dic = {'name': 'trophy', 'age': 22} #創建1個字典使用**解包再傳入函數
test_kwargs(**dic) #{'name': 'trophy', 'age': 22}
下面將這兩種參數混合使用,注意參數的順序:
def test_mix(*args, **kwargs):
print(args)
print(kwargs)
test_mix(1, 2, 3, name='trophy', age=22)
#輸出:
#(1, 2, 3)
#{'name': 'trophy', 'age': 22}