Table des matières

, , ,

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