【Python】函数形参中的【*args】和【**kwargs】
xixuefeng
Python
2018-02-27 8:44:42
895 次浏览
args, kwargs
【Python】函数形参中的【*args】和【**kwargs】已关闭评论
一:*args
将实参按照位置与形参对应传入,多出来的值都给args,并且以元组的方式展现出来
1:两个参数,一个参数p加上一个参数*args
1 2 3 4 5 6 7 8 9 10 |
## 我们定义了一个函数,两个参数,一个是p,一个是*args >>> def func(p,*args): ... print(p) ... print(args) ... >>> func(1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) 1 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) >>> ## 当调用函数传入的参数我们可以看到,参数1,传给了p,2-16传给了args,我们也可以看到,args已元组的形式呈现出来。 |
2:三个参数,p,t,*args,有了上面的测试,这个就很好理解了。
1 2 3 4 5 6 7 8 9 10 |
>>> def func(p,t,*args): ... print(p) ... print(t) ... print(args) ... >>> func(1,2,3,4,5,6,7,8) 1 2 (3, 4, 5, 6, 7, 8) >>> |
3:三个参数,p,*args,t
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
>>> def func(p,*args,t): ... print(p) ... print(args) ... print(t) ... >>> func(1,2,3,4,5,6,7,8) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: func() missing 1 required keyword-only argument: 't' >>> ## 很显然这样报错了,并且报错很明显,大致意思就是t这个参数没有任何数值传入,1后面的所有参数都给args了。 ## 这个问题很好解决,只需要给参数t赋予默认值即可。 >>> def func(p,*args,t=100): ... print(p) ... print(args) ... print(t) ... >>> func(1,2,3,4,5,6,7,8) 1 (2, 3, 4, 5, 6, 7, 8) 100 >>> ## 如果def func(p,t=100,*args):这样定义参数,func(1,2,3,4,5,6,7,8),这会是个什么结果呢? ## 对了,跟我们想象的一样,传入的参数会覆盖默认值 |
二:**kwargs
**kwargs与*args一样,参数多余的值以字典(key=>value)的形式呈现
1:两个参数,一个参数p加上一个参数**kwargs
1 2 3 4 5 6 7 8 |
>>> def func(p,**kwargs): ... print(p) ... print(kwargs) ... >>> func(100,a=1,b=2,c=3,d=4,e=5) 100 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} >>> |
2:**kwargs与*args一起使用
1 2 3 4 5 6 7 8 9 10 |
>>> def func(p,*args,**kwargs): ... print(p) ... print(args) ... print(kwargs) ... >>> func(100,1,2,3,a=1,b=2,c=3,d=4,e=5) 100 (1, 2, 3) {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} >>> |
三:小结
**kwargs与*args用法一样,只是返回的结果类型不同,*args返回的是元组,**kwargs返回的是字典