web-dev-qa-db-fra.com

Conversion de liste en * arguments lors de l'appel de la fonction

En Python, comment convertir une liste en *args?

J'ai besoin de savoir parce que la fonction

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

veut que plusieurs objets time_series soient passés en tant que *args, alors que j'ai une liste d'objets timeseries.

112
andreas-h

Vous pouvez utiliser le * _ opérateur devant un itérable pour le développer dans l'appel de fonction. Par exemple:

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

(remarquez le * avant timeseries_list)

De la documentation python :

Si la syntaxe * expression apparaît dans l'appel de fonction, expression doit être évaluée comme une variable. Les éléments de cette variable sont traités comme s'il s'agissait d'arguments de position supplémentaires. s'il existe des arguments de position x1, ..., xN et que l'expression est évaluée à une séquence y1, ..., yM, cela équivaut à un appel avec M + N arguments de position x1, ..., xN, y1,. .., yM.

Ceci est également couvert dans le python tutoriel), dans une section intitulée Déballage des listes d’arguments , où il montre également comment faire une chose similaire avec les dictionnaires pour les arguments de mots clés avec ** _ opérateur.

170
Bryan Oakley

oui, utiliser * arg en transmettant des arguments à une fonction fera python) décompresser les valeurs dans arg et les transmettre à la fonction.

alors:

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

*args signifie simplement que la fonction prend plusieurs arguments, généralement du même type.

Découvrez cette section dans le Python tutoriel pour plus d’informations).

1
intuited