快速理解Python不定長度參數*args,**kwargs
*args跟**kwargs功能一樣,就是傳遞不定長度的參數
使用時應注意事項
- *args,**kwargs同時出現的話,- *args固定在- **kwargs之前,通常都會2個一起寫。若需求很明確,也可以只寫其中一種
- *與- **後面的名稱可以自定,如- *vars或- **kwvars。一般習慣寫成- *args,**kwargs
- *args負責將單一參數組成tuple,即- myFunc(para1,para2,para3...)
- **kwargs負責將key-value參數組成dict傳入,即- myFunc(a=1,b=2,c=3...)
範例
def test_kwargs(**kwargs):
    print('kwargs:',kwargs)
def test_args(*args):
    print('args:',args)
test_args(1,'a','c',2,'test') # 可以一直無限加參數進去
test_kwargs(a=1,b=2,c=3)      # 可以一直無限加參數進去輸出結果
args:(1, 'a', 'c', 2, 'test')
kwargs:{'a': 1, 'b': 2, 'c': 3}若傳遞錯誤時,Python會直接報錯
test_args(a=1)     #會報錯,因程式沒有**kwargs
test_kwargs('a')    #同樣報錯,因沒有*args進階範例
def test_kwargs(**kwargs):
    print('kwargs:',kwargs)    # 包成dict印出
    print('*kwargs:',*kwargs)  # 僅印出key值
    #print(**kwargs)           # 無法直接使用**kwargs,會報錯
    # 但可用迴圈方式得到key,value
    print('可用迴圈方式得到key,value')
    for k,v in kwargs.items():
        print(f'{k} -> {v}')
    
    #自行檢查是否有確實傳入要求的參數
    print('自行檢查是否有確實傳入要求的參數')
    if 'a' in kwargs:
        print('Value in key "a" exists! "a" is',kwargs['a'])
def test_args(*args):
    print('args:',args)
    print('*args:',*args)
test_args(1,'a','c',2,'test')
print('-----------分隔線------------')
test_kwargs(a=1,b=2,c=3)輸出結果
args: (1, 'a', 'c', 2, 'test')
*args: 1 a c 2 test
-----------分隔線------------
kwargs: {'a': 1, 'b': 2, 'c': 3}
*kwargs: a b c
可用迴圈方式得到key,value
a -> 1
b -> 2
c -> 3
自行檢查是否有確實傳入要求的參數
Value in key "a" exists! "a" is 1由以上範例可以知道**kwargs使用方式基本上等同於dict,使用時不必特地加上**,直接用kwargs當參數就可以
雖然使用*kwargs可以得到KEY值,但需要另存到另一變數後才可以在if、for-in中使用,不如就直接用kwargs來的簡單快速。*args亦同