python - Conversión de lista a*args cuando se llama a la función
subplot python (3)
En Python, ¿cómo convierto una lista a * args?
Necesito saber porque la función
scikits.timeseries.lib.reportlib.Report.__init__(*args)
quiere que varios objetos time_series pasen como * args, mientras que tengo una lista de objetos de timeseries.
Cualquier ayuda es muy apreciada :)
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 de sintaxis * aparece en la llamada a la función, la expresión debe evaluarse como iterable. Los elementos de este iterable se tratan como si fueran argumentos posicionales adicionales; si hay argumentos posicionales x1, ..., xN, y la expresión evalúa a una secuencia y1, ..., yM, esto es equivalente a una llamada con argumentos posicionales M + N x1, ..., xN, y1,. .., yM.
Esto también se cubre en el tutorial de Python, en una sección titulada Desempaquetar listas de argumentos , donde también se muestra cómo hacer algo similar con los diccionarios para argumentos de palabras clave con el operador **
.
sí, usar * arg pasando args a una función hará que python descomprima los valores en arg y lo pase a la función.
asi 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],)
>>>
*args
solo significa que la función toma una cantidad de argumentos, generalmente del mismo tipo.
Consulte esta sección en el tutorial de Python para obtener más información.