调用函数时将 list 转换为 * args

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

我需要知道,因为函数

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

需要几个作为 *args传递的时间序列对象,而我有一个时间序列对象的列表。

155324 次浏览

可以在迭代之前使用 *操作符在函数调用中展开它。例如:

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

(注意 timeseries_list之前的 *)

来自 Python 文档:

如果语法 * 表达式出现在函数调用中,则 必须计算为可迭代的。来自这个可迭代的元素被处理 好像它们是额外的位置参数; 如果有 位置参数 x1、 ... 、 xN 和表达式的计算结果为 序列 y1,... ,yM,这等效于 M + N 位置的调用 参数 x1,... ,xN,y1,... ,yM。

Python 教程在标题为 拆开参数列表的部分中也介绍了这一点,其中还展示了如何使用 **操作符对关键字参数的字典进行类似的操作。

*args意味着函数接受大量的参数,通常是相同类型的参数。

有关更多信息,请参阅 Python 教程中的 这部分

是的,使用 * 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],)
>>>