更新時(shí)間:2023年02月17日11時(shí)23分 來(lái)源:傳智教育 瀏覽次數(shù):
*args和**kwargs都適用于函數(shù)的定義的。在日常工作中,如果我們不確定函數(shù)的參數(shù)時(shí)候,就可以使用*args和**kwargs去把不定數(shù)量的參數(shù)傳遞給一個(gè)函數(shù)。那么什么叫做不定呢,這里解釋為預(yù)先并不知道函數(shù)的使用者會(huì)傳遞多少個(gè)參數(shù),故而,我們一般在這樣的場(chǎng)景中使用這兩個(gè)關(guān)鍵字。
*args通常被用作發(fā)送一個(gè)非鍵值對(duì)的可變數(shù)量的參數(shù)列表給一個(gè)函數(shù)。*args可以接收任意多個(gè)參數(shù)并把這些參數(shù)作為元組傳遞給函數(shù)。*args以元組的形式傳遞,是沒(méi)有key值的。
**kwargs存儲(chǔ)可變的關(guān)鍵字參數(shù),允許使用沒(méi)有事先定義的參數(shù)名,將接收到任意多個(gè)關(guān)鍵字參數(shù)作為字典傳遞給函數(shù)。**kwargs是以字典的形式傳遞,有key值。
這里需要強(qiáng)調(diào)的是,函數(shù)的參數(shù)的順序:*args必須在**kwargs前面,調(diào)用函數(shù)傳遞參數(shù)也必須依照這個(gè)順序。
(1)*args示例
def demo(args_f,*args_v): print(args_f) for x in args_v: print(x,end=") demo(1,'a','b','c','d')
運(yùn)行結(jié)果
1 Abcd
再例如:
def function(x,y,*args): print(x,y,args) function(1,2,3,4,5)
運(yùn)行結(jié)果:
12(3,4,5)
說(shuō)明傳遞給函數(shù)的是一個(gè)元組。
(2)**kwargs示例
def demo(**args_v): for k,in args_v.items(): print(k,v) demo(name='1hr')
運(yùn)行結(jié)果:
name 1hr
再例如:
def function(**kwargs): print(kwargs,type(kwargs)) function(a=2)
運(yùn)行結(jié)果
{'a':2} <class 'dict'>
需要注意的是,參數(shù)arg、*args、**kwargs三個(gè)參數(shù)的位置是確定的。必須是“(arg,*args,**kwargs)”這個(gè)順序,否則程序會(huì)報(bào)錯(cuò)。
def function(args,*args,**kwargs): print(args,args,kwargs) function(6,7,8,9,a=1,b=2,c=3)
運(yùn)行結(jié)果:
6(7,8,9){'a':1,'b':2,'c':3}
北京校區(qū)