Converting list to *args when calling function

PythonListArgumentsFunction Call

Python Problem Overview


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

I need to know because the function

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

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

Python Solutions


Solution 1 - Python

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.

Solution 2 - Python

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

so:

>>> 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],)
>>> 

Solution 3 - Python

*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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionandreas-hView Question on Stackoverflow
Solution 1 - PythonBryan OakleyView Answer on Stackoverflow
Solution 2 - PythonAntView Answer on Stackoverflow
Solution 3 - PythonintuitedView Answer on Stackoverflow