2014-07-19 78 views
0

下面的代码是不正确的:Python函数参数传递序列

def add(a, b, c): 
    return a + b + c 
args = (2, 3) 

add(a = 1, *args) 
TypeError: add() got multiple values for keyword argument 'a' 

我见过一些例子​​,但我仍然不知道为什么有一个错误,有谁能够详细解释一下?

+2

我注意到搜索[“有多个值的关键字参数”](http://stackoverflow.com/search?q=%22got+multiple+values+for+keyword+argument%22)产量很大的命中。这些问题是否适合你的情况? –

回答

4

当应用参数时,Python 第一个填充位置参数,然后关键字参数。

在您的具体情况下,*args然后应用第一,所以第一个位置参数传递2,第二个传递3。第一个参数是a这里。

然后a = 1被应用,Python发现你已经为它应用了一个值。

换句话说,当你使用一个作为关键字参数时,Python不能也不会不考虑位置参数。仅仅因为您使用a作为关键字参数不会使其不适合作为位置参数。