Python中*args 和**kwargs的用法

刚开始学习python的时候,对有关args,kwargs,和*的使用感到很困惑。相信对此感到疑惑的人也有很多。通过这个帖子给大家来排解这个疑惑(希望能减少疑惑)。

让我们通过以下5步来理解: 
1. 通过一个函数调用来理解’*’的作用 
2. 通过一个函数的定义来理解’*args’的含义 
3. 通过一个函数的调用来理解’**’的作用 
4. 通过一个函数的定义来解’**kwargs’的含义 
5. 通过一个应用实例来说明’args’,’kwargs’应用场景以及为何要使用它


通过一个函数调用来理解’*’的作用

定义一个含三个位置参数的函数”fun”.

>>> def fun(a,b,c):
...     print a,b,c
... 

传三个位置参数调用此函数

>>> fun(1,2,3)
1 2 3       #输出

可以看到出入三个位置参数调用此函数,会打印出三个参数

现在我们定义一个含三个整数的数列,并使用’*’

>>> l = [1,2,3]
>>> fun(*l)
1 2 3       #输出

‘*’ 做了什么?

它拆开数列’l’的数值作为位置参数,并吧这些位置参数传给函数’fun’来调用。

因此拆数列、传位置参数意味着fun(*l)与fun(1,2,3)是等效的,因为l = [1,2,3]。

试着数列中使用其他数值

>>> l = [4,8,0]
>>> fun(*l)
4 8 0       #输出

接下来我们试着在数列中放四个数值,调用函数会出现什么情况呢

>>> l = [3,6,9,1]
>>> fun(*l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fun() takes exactly 3 arguments (4 given)

在这次调用中我们并没有得到合适的结果,触发了TypeWrror异常。很容易看到错误内容”fun() takes exactly 3 arguments (4 given)”.

为什么会发生这种情况呢?

数列’l’含有四个数值.因此,我们试图调用’fun(*l)’,’l’中数值拆开传给函数fun作为位置参数。但是,’l’中有四个数值,调用’fun(*l)’相当于调用’fun(3,6,9,1)’,又因为函数’fun’定义中只用三个位置参数,因此我们得到这个错误。同理,同样的步骤,数列’l’中有两个数值情况,注意error内容。

>>> l = [7,4]
>>> fun(*l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fun() takes exactly 3 arguments (2 given)

‘*l’与位置参数混合使用

>>> fun(23, *l)
23 7 4

在这里,我们给出一个位置参数23,和从数列’l’拆除的两个数值7和4,因此三个参数23,7和4传给了函数’fun’

通过一个函数的定义来理解’*args’的含义

修改函数的定义:

>>&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值