将列表转换为调用函数时的 *args

184 投票
3 回答
170716 浏览
提问于 2025-04-16 05:32

在Python中,我该如何把一个列表转换成*args呢?

我需要知道这个,因为我有一个时间序列对象的列表,而这个函数

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

需要传入多个时间序列对象作为*args

3 个回答

3

*args 的意思是这个函数可以接收多个参数,通常这些参数都是同一种类型。

想了解更多信息,可以查看 Python教程中的这一部分

27

是的,使用 *arg 这种方式把参数传给一个函数,会让 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],)
>>> 
283

你可以在函数调用前面加上 * 操作符,这样可以把一个可迭代的对象(比如列表)展开。举个例子:

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

(注意在 timeseries_list 前面的 *

根据 Python 文档 的说明:

如果在函数调用中看到 *expression 这样的语法,expression 必须是一个可迭代的对象。这个可迭代对象中的元素会被当作额外的位置参数来处理;假设有位置参数 x1, ..., xN,而 expression 评估后是一个序列 y1, ..., yM,那么这就相当于调用时有 M+N 个位置参数 x1, ..., xN, y1, ..., yM。

这个内容在 Python 教程中也有介绍,标题为 展开参数列表,里面还展示了如何用 ** 操作符对字典进行类似的操作,以处理关键字参数。

撰写回答