为什么使用变量参数的代码会产生TypeError?

时间:2016-10-21 10:34:12

标签: python function variadic-functions

为什么我在此代码中出现此错误?

def fun(a,*b):   
    print(a,b)
fun(1,x=4,y=5)

执行代码时出现此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fun() got an unexpected keyword argument 'x'

1 个答案:

答案 0 :(得分:6)

你的函数根本没有关键字参数,只有位置参数。 *varargs语法仅捕获额外的位置参数(没有name=前缀)。

删除关键字参数语法并仅传递位置参数,更新函数以获取关键字参数。

以下作品:

fun(1, 4, 5)  # b will be set to (4, 5)

或在函数签名中添加**c或类似的关键字**varkwargs

def fun(a, *b, **c):
    print(a, b, c)

fun(1, x=4, y=5)  # prints 1 () {'x': 4, 'y': 5}

对于这个具体的例子,可以删除*b参数,因为你实际上并没有传递多个位置参数。