*args, **kwargs另外的用处

用在定义函数形参时,*args表示将下例a,b之外的实参处给它作为一个列表,**kwargs表示将关键字实参处给它作为一个字典

但是在函数内部使用*args,**kwargs时,它们代表将接收到的实参分别拆包

def test(a,b,*args,**kwargs):

  print("----------")
print(a,b) print(args) print(kwargs) def test2(a,b,*args,**kwargs): print(a,b) print(args) print(kwargs) test(a,b, args, kwargs) #注意这里 [test(a,b,*args,**kwargs)]      a = test2(11,22,33,44,55,66,name="xiaoming",age = 18)


输出:

(11, 22)
(33, 44, 55, 66)
{'age': 18, 'name': 'xiaoming'}
---------
(11, 22)
((33, 44, 55, 66), {'age': 18, 'name': 'xiaoming'})
{}

test2中的args,kwargs当作实参传给test,但是它们两个却作为一个元组给了args

可以把test(a,b,args,kwargs)改为test(a,b,*args,**kwargs),这样*会讲实参args拆包成33,,44,55,66传给test,

**可以将实参kwargs拆包成name="xiaoming",age=18传递给test:

 

(11, 22)
(33, 44, 55, 66)
{'age': 18, 'name': 'xiaoming'}
---------
(11, 22)
(33, 44, 55, 66)
{'age': 18, 'name': 'xiaoming'}

 

 

posted @ 2019-01-17 09:49  greenfan  阅读(132)  评论(0)    收藏  举报