2010-10-15 73 views
71

在Python中,如何将列表转换为* args?将列表转换为Python中的* args

我需要知道,因为函数

scikits.timeseries.lib.reportlib.Report.__init__(*args) 

希望为* ARGS通过几个time_series对象,而我有时间序列对象的列表。

任何帮助是极大的赞赏:)

回答

116

可以使用*操作前可迭代的函数调用内展开。例如:

timeseries_list = [timeseries1 timeseries2 ...] 
r = scikits.timeseries.lib.reportlib.Report(*timeseries_list) 

(注意*timeseries_list

python documentation

如果语法*表达出现在函数调用,表达 必须计算为一个迭代。来自此迭代器的元素被视为 ,就好像它们是附加的位置参数一样;如果存在位置参数x1,...,xN,并且表达式求值为 序列y1,...,yM,则这相当于具有M + N位置 自变量x1,...,xN的呼叫, y1,...,yM。

+4

忘记这一点:http://docs.python.org/reference/expressions.html#calls – 2010-10-15 11:03:42

1

*args只是表示该函数需要大量的参数,通常是相同的类型。

请参阅Python教程中的this section了解更多信息。

+0

我觉得OP已经知道这一点。该函数需要多个参数,但他们有一个单一的列表,他们想要通过多个参数。 – 2010-10-15 12:37:45

+0

@Bryan Oakley:我链接的文档解释了如何做到这一点。 – intuited 2010-10-15 12:52:37

+4

虽然这是真的,但是你的答案听起来像指向其他地方的链接。我想你的答案会更有用,如果你将它解释为解开包装而不是* args的含义。 – 2010-10-15 13:56:25

10

是的,使用* arg将args传递给一个函数会使python在arg中解压值并将其传递给函数。

这样:

>>> def printer(*args): 
print args 


>>> printer(2,3,4) 
(2, 3, 4) 
>>> printer(*range(2, 5)) 
(2, 3, 4) 
>>> printer(range(2, 5)) 
([2, 3, 4],) 
>>>