Converting list to *args when calling function


In Python, how do I convert a list to *args?

I need to know because the function


wants several time_series objects passed as *args, whereas I have a list of timeseries objects.

Asked By: andreas-h



You can use the * operator before an iterable to expand it within the function call. For example:

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

(notice the * before timeseries_list)

From the python documentation:

If the syntax *expression appears in the function call, expression
must evaluate to an iterable. Elements from this iterable are treated
as if they were additional positional arguments; if there are
positional arguments x1, …, xN, and expression evaluates to a
sequence y1, …, yM, this is equivalent to a call with M+N positional
arguments x1, …, xN, y1, …, yM.

This is also covered in the python tutorial, in a section titled Unpacking argument lists, where it also shows how to do a similar thing with dictionaries for keyword arguments with the ** operator.

Answered By: Bryan Oakley

*args just means that the function takes a number of arguments, generally of the same type.

Check out this section in the Python tutorial for more info.

Answered By: intuited

yes, using *arg passing args to a function will make python unpack the values in arg and pass it to the function.


>>> 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],)
Answered By: Ant