165

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

我需要知道,因为函数

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

想要几个 time_series 对象作为 传递*args,而我有一个 timeseries 对象列表。

4

3 回答 3

248

您可以*在可迭代对象之前使用运算符在函数调用中扩展它。例如:

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

(注意*前面timeseries_list

python文档

如果语法 *expression 出现在函数调用中,则表达式必须计算为可迭代。来自这个可迭代的元素被视为附加的位置参数;如果有位置参数 x1, ..., xN,并且表达式的计算结果为序列 y1, ..., yM,则这等效于使用 M+N 个位置参数 x1, ..., xN, y1, 的调用。 ..,嗯。

这也包含在 python 教程中,在标题为Unpacking argument lists的部分中,它还展示了如何使用运算符对关键字参数的字典执行类似的**操作。

于 2010-10-15T10:50:49.937 回答
22

是的,使用 *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],)
>>> 
于 2010-10-15T11:27:36.540 回答
2

*args只是意味着该函数需要许多参数,通常是相同类型的。

查看Python 教程中的此部分以获取更多信息。

于 2010-10-15T10:52:18.333 回答