Python — *args 和 **kwargs

son John
2 min readSep 23, 2019

在寫Python時,常會遇到需要傳不固定的參數值,這時*args和**kwargs就發揮得很大的功效。

這兩個都是可變參數,不同的地方是:

  • *args是非鍵值的參數,也就是傳一般的值但是長度是可變的
def func(a, b, *args):
print('a', a)
print('b', b)
print('args', args)
print(type(args))func(1, 2, 9, 8, 7)

結果:

a 1
b 2
args (9, 8, 7)
<class 'tuple'>

在此函數中我們固定了前兩個的傳值數量,剩下傳入的值都會歸args所有

**注意args是tuple型態

  • **kwargs是屬於鍵值的參數就是字典(dict)
def func(a, b, **kwargs):
print('a', a)
print('b', b)
print('kwargs', kwargs)
print(type(kwargs))func(1, 2, z=9, y=8, x=7)

結果

a 1
b 2
kwargs {'z': 9, 'y': 8, 'x': 7}
<class 'dict'>

所謂字典(dict)就是長這樣的 前面是key值後面是value值,在此函數中我們固定了前兩個的傳值數量,剩下傳入的key=value值都會歸kwargs所有

{'z': 9, 'y': 8, 'x': 7}

**注意傳入時的key值不可和函數內固定的參數名稱重複

若在一個函數需要用到兩個可變參數時:

def func(a, b, *args, **kwargs):
print('a', a)
print('b', b)
print('args', args)
print('kwargs', kwargs)
func(1, 2, 55, 66, 77, z=9, y=8, x=7)

結果

a 1
b 2
args (55, 66, 77)
kwargs {'z': 9, 'y': 8, 'x': 7}

**要注意*args一定要在**kwargs前面否則會出現錯誤!

--

--