2016-09-22 66 views
3

我有这样的功能,它的参数列表:如何传递函数列表及其所有参数在Python中的另一个函数中执行?

(func1, *arg1), (func2, *arg2),... 

我想将它们传递到另一个函数这样执行它们:

for func, arg* in (list of funcs, args): 
    func(arg*) 

如何做到这一点在Python?我已经尝试了几次,但它不喜欢拆包和* arg。

+2

除了'ARG *'是在Python无效的语法,什么确切的问题是你有? “它不喜欢”有点模糊。也请显示原始列表的确切格式。 –

回答

3

您可以使用*-operator to unpack the arguments out of the tuple

例如,假设调用列表中的项目格式为(function,arg1,arg2,...)。换句话说,item[0]是你的函数,而item[1:]是应该给函数的参数。

def f1(x1): 
    print("f1 {0}".format(x1)) 

def f2(x1,x2): 
    print("f2 {0} {1}".format(x1,x2)) 

for data in ((f1,5),(f2,3,4)): 
    data[0](*data[1:]) 
# output: 
# f1 5 
# f2 3 4 
0

你可以这样做,只需使用元组列表,其中首先是函数名称,其余是参数。

def a(*args,**kwargs): 
    print 1 

list_f = [(a,1,2,3)] 

for f in list_f: 
    f[0](f[1:]) 
+0

您的解决方案使用一个参数调用函数 - 一个元组。 – napuzba

0

假设你的功能和参数可在元组分开,

def squarer(*args): 
    return map(lambda x: x*2, args) 

def subtracter(*args): 
    return map(lambda x: x-1, args) 

funcAndArgs = [(squarer, [1,2,3,4]), (subtracter, [1,2,3,4])] 

for func, args in funcAndArgs: 
    print func(*args) 

输出:

[2, 4, 6, 8] 
[0, 1, 2, 3] 
相关问题