0

我正在尝试制作一个旨在多次调用另一个函数的函数:

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) 被视为单个参数。

我该如何解决这个问题?

4

2 回答 2

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
于 2013-11-11T23:16:52.357 回答
2

试试这个,解压参数列表(又名 splatting):

function(*args)

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

range(3, 6)    # ok
range([3, 6])  # won't work
range(*[3, 6]) # it works!
于 2013-11-11T23:17:09.847 回答