将列表转换为调用函数时的 *args
在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 教程中也有介绍,标题为 展开参数列表,里面还展示了如何用 **
操作符对字典进行类似的操作,以处理关键字参数。