{{tag>dev python splat etoile}} ====== Opérateur étoile avec Python ====== ===== Unpacking des paramètres effectifs ===== Lorsque l'opérateur est placé devant un argument effectif sur un appel de fonction, chaque valeur de la variable est passé à un paramètre différent de la fonction. Il doit y avoir correspondance entre le nombre d'éléments de la variables et le nombre de paramètres de la fonction: #Definition d'une fonction affichant ces 3 paramètres dont le premier est obligatoire def testSplatParam(p, p1=None, p2=None): print p print p1 print p2 # Définition d'un tuple toto contenant 3 éléments toto=("A", "B", "C") # Le tuple toto est passé en premier argument testSplatParam(toto) ('A', 'B', 'C') None None # Avec l'opérateur splat, chaque élément du tuple est passé à un paramètre différent de la fonction testSplatParam(*toto) A B C L'opérateur splat doublé devant l'argument effectif permet d'effectuer l'unpacking sur un dictionnaire. Il doit y avoir correspondance entre les clés du dictionnaire et les nom de paramètres dans la définition de la fonction: # Définition de la fonction avec 3 paramètres désignés param1, param2 et param3 def testSplatParam(param1, param2=None, param3=None): print param1 print param2 print param3 mon_dico = {"param1": "A", "param2": "B", "param3": "C"} testSplatParam(**mon_dico) A B C ===== Paramétrage dynamique ===== Utiliser dans une définition de fonction, l'opérateur splat permet d'indiquer une quantité indéfinie de paramètres. On peut combiner ce type de déclaration avec des paramètres classiques. Dans ce cas il n'y a qu'un seul opérateur splat dans la définition et il est pacé en dernier. Par convention l'argument est nommmé *args. Dans l'exemple ci-dessous la fonction paramIndef() acceptera 1 ou paramètres. def paramIndef(p1, *args): print p1 for p in args: print p ===== Références ===== * http://sametmax.com/operateur-splat-ou-etoile-en-python/