我正在尝试设计一个多次调用另一个函数的函数:
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)被视为一个参数。
我该如何解决这个问题?
答案 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!