Conversión de la lista a * args al llamar a la función


En Python, ¿cómo convertir una lista a *args?

Necesito saber porque la función

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

Quiere que se pasen varios objetos time_series como *args, mientras que tengo una lista de objetos timeseries.

Cualquier ayuda es muy apreciada :)

Author: smci, 2010-10-15

3 answers

Puede usar el operador * antes de un iterable para expandirlo dentro de la llamada a la función. Por ejemplo:

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

(observe el * antes de timeseries_list)

De la documentación de python :

Si la expresión syntax *aparece en la llamada a la función, debe evaluar a un iterable. Los elementos de este iterable son tratados como si fueran argumentos posicionales adicionales; si hay argumentos posicionales x1, ..., XN y expression evalúan a secuencia y1, ..., yM, esto es equivalente a una llamada con M+N posicional argumentos x1, ..., xN, y1, ..., yM.

Esto también está cubierto en el tutorial de python, en una sección titulada Desempaquetar listas de argumentos, donde también muestra cómo hacer algo similar con diccionarios para argumentos de palabras clave con el operador **.

 136
Author: Bryan Oakley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-06 13:33:39

Sí, usando *arg pasar args a una función hará que python descomprima los valores en arg y los pase a la función.

Así que:

>>> 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],)
>>> 
 12
Author: Ant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-07 15:44:51

*args solo significa que la función toma un número de argumentos, generalmente del mismo tipo.

Echa un vistazo a esta sección en el tutorial de Python para más información.

 1
Author: intuited,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-15 10:52:18