* args被视为单个参数

时间:2013-11-11 23:15:43

标签: python function arguments args

我正在尝试设计一个多次调用另一个函数的函数:

def iterator(iterations, function, *args):  
#called as:
iterator(5, my_function, arg1, arg2, arg3)  

请注意,此处的参数数量是可变的:可以是1,可以是2,可以是10。 根据被调用的函数填充它们。

def iterator(iterations, function, *args):
  for i in range(iteration):
    temp = function(args)
  return temp

这里的问题是:  TypeError:my_function()只需要4个参数(给定1个)

这是因为(arg1,arg2,arg3,arg4)被视为一个参数。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

应用 args序列时使用相同的语法:

temp = function(*args)

这里的*args语法与*args函数参数语法密切相关;而不是捕获任意数量的参数,在调用中使用*args扩展序列以分隔参数。

您可能有兴趣知道有**kwargs语法来捕获和应用关键字参数:

def iterator(iterations, function, *args, **kwargs):
    for i in range(iteration):
        temp = function(*args, **kwargs)
    return temp

答案 1 :(得分:2)

试试这个,unpacking the argument list(a.k.a. splatting it):

function(*args)

从文档中的示例中,您将看到这就是您所需要的:

range(3, 6)    # ok
range([3, 6])  # won't work
range(*[3, 6]) # it works!