天天看点

python args i_如何在python中使用*args

我有一个函数模块,它有一些函数,所有函数都有一些公共输入,还有一些是它们特有的。e、 gdef func_a(time_series, window ='1D'):

def func_b(time_series, window ='1D', availability_history ):

def func_c(time_series, window ='1D', max_lag=25, use_probability ='T'):

我尝试在循环中运行这些函数,如下所示:

^{pr2}$

在另一个模块里class class_X(object):

def __init__(self, a, b, func_to_run):

self.a = a

self.ts = b

self.method = func_to_run

def generate_output(self, *args):

return self.method(self.ts, args) # time series is common and fixed for all, other params differ or change

上面的代码行不通,因为我认为需要更改我调用的函数来使用*args,而不是使用固定的定义参数。在

我认为*args是指输入参数数目未知的函数,但我试图在一个输入参数的数目已知,但在循环中不同函数不同的情况下使用它。在

如果我不必修改functions模块,并且仍然可以将所有必需的参数作为单个对象(e.g. list or tuple)传递,有没有解决这个问题的方法?在

编辑-

macromoonshine的答案是我可以用这样的夸克:def generate_output(self, **kwargs):

return self.method(self.ts, kwargs)

通过此修改,您可以调用generate_outputs(),如下所示:x.generate_outputs( window ='1D', max_lag=25, use_probability ='T')

其中xis是X类的一个实例

这是否可以增强,以便我可以传递参数而不是时间序列和窗口作为循环中的查找值,例如x.generate_outputs( window ='1D', params[iloop])

在哪里params[iloop] = max_lag=25, use_probability ='T'

我试着这么做:params = (30, "F")

x.generate_outputs( window, *params)

但是有个错误TypeError: generate_output() takes 1 positional argument but 4 were given