*args 不定參數,元組,如(1,2,n)
**kwargs 傳入鍵值對,字典(例如:num1=11,num2=22)
先看示例1:
def test(a,b,c=3,*args):
print(a)
print(b)
print(c)
print(args)
test(11,22,33,44,55)
輸出值分別為:
11
22
33
(44,55)
也就是說args中保存的是沒有利用的所有多余參數,保存方式為元組
再看示例2:
def test(a,b,c=3,*args1,**args2):
print(a)
print(b)
print(c)
print(args1)
print(args2)
test(11,22,33,dd=44,ee=55,ff=66)
輸出結果為:
11
22
33
()
{'dd':44, 'ee':55, 'ff':66}
即輸入多余參數有變量名,就保存在args中保存,保存方式為字典
如果多余參數中既有*args類型,也有args類型,則分別保存
def foo(*args, **kwargs):
print ('args = ', args)
print ('kwargs = ', kwargs)
print ('---------------------------------------')
if __name__ == '__main__':
foo(1,2,3,4)
foo(a=1,b=2,c=3)
foo(1,2,3,4, a=1,b=2,c=3)
foo('a', 1, None, a=1, b='2', c=3)
輸出結果如下:
args = (1, 2, 3, 4)
kwargs = {}
args = ()
kwargs = {'a': 1, 'c': 3, 'b': 2}
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'c': 3, 'b': 2}
args = ('a', 1, None)
kwargs = {'a': 1, 'c': 3, 'b': '2'}
可以看到,這兩個是Python/ target=_blank class=infotextkey>Python中的可變參數。
args表示任何多個無名參數,它是一個tuple;
**kwargs表示關鍵字參數,它是一個 dict。并且同時使用args和kwargs時,必須*args參數列要在kwargs前,
像foo(a=1, b=‘2’, c=3, a’, 1, None, )這樣調用的話,會提示語法錯誤“SyntaxError: non-keyword arg after keyword arg”。