将列表转换为Python中的* args
在Python中,如何将列表转换为* args?将列表转换为Python中的* args
我需要知道,因为函数
scikits.timeseries.lib.reportlib.Report.__init__(*args)
希望为* ARGS通过几个time_series对象,而我有时间序列对象的列表。
任何帮助是极大的赞赏:)
可以使用*
操作前可迭代的函数调用内展开。例如:
timeseries_list = [timeseries1 timeseries2 ...]
r = scikits.timeseries.lib.reportlib.Report(*timeseries_list)
(注意*
前timeseries_list
)
如果语法*表达出现在函数调用,表达 必须计算为一个迭代。来自此迭代器的元素被视为 ,就好像它们是附加的位置参数一样;如果存在位置参数x1,...,xN,并且表达式求值为 序列y1,...,yM,则这相当于具有M + N位置 自变量x1,...,xN的呼叫, y1,...,yM。
*args
只是表示该函数需要大量的参数,通常是相同的类型。
请参阅Python教程中的this section了解更多信息。
我觉得OP已经知道这一点。该函数需要多个参数,但他们有一个单一的列表,他们想要通过多个参数。 – 2010-10-15 12:37:45
@Bryan Oakley:我链接的文档解释了如何做到这一点。 – intuited 2010-10-15 12:52:37
虽然这是真的,但是你的答案听起来像指向其他地方的链接。我想你的答案会更有用,如果你将它解释为解开包装而不是* args的含义。 – 2010-10-15 13:56:25
是的,使用* 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],)
>>>
忘记这一点:http://docs.python.org/reference/expressions.html#calls – 2010-10-15 11:03:42