在寫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前面否則會出現錯誤!