1. L'argument *args
1.1 problématique
Si on souhaite créer une fonction somme qui permet de sommer les valeurs passés en paramètres le truc est assez simple!
1 2 3 |
def somme(x , y): return x + y print(somme(3 , 2)) # affiche 5 |
Le programme affiche la somme 5 sans aucun problème ! Mais si on veut varier le nombre de paramètres
1 2 3 4 |
def somme(x , y): return x + y print(somme(3 , 2)) print(somme(3 , 2 , 5)) |
Le problème affiche un message d'erreur:
builtins.TypeError: somme() takes 2 positional arguments but 3 were given
cela est du au fait que la fonction accèpte deux et uniquement deux paramètres! Pour palier à ce problème, le langage Python fournit le paramètre *args
1.2 Le paramètre *args
Comme dans l'exemple ci-dessus, nous ne sommes pas sûrs du nombre d'arguments qui peuvent être passés à une fonction. Python nous offre *args qui permet de passer un nombre d'arguments variable.
Dans la fonction, nous devons utiliser un astérisque * avant le nom du paramètre pour passer des arguments de longueur variable. Les arguments sont passés sous forme de tuple et ces arguments passés forment un tuple à l'intérieur de la fonction avec le même nom que le paramètre à l'exclusion de l'astérisque *.
Exemple
1 2 3 4 5 6 7 8 9 |
def somme( *args ): sum = 0 for n in args: sum = sum + n return sum print(somme(3 , 2)) # affiche 5 print(somme(3 , 2 , 5)) # affiche 10 print(somme(3 , 2 , 5 , 7)) # affiche 17 |
2. Le paramètre **kwargs
La syntaxe spéciale **kwargs dans les définitions de fonctions en python est utilisée pour transmettre une liste d'arguments à mots clés de longueur variable. Cela permet ainsi l'usage d'arguments nommés. Nous utilisons le nom kwargs avec la double étoile. La raison en est que la double étoile nous permet de passer par des arguments de mots-clés dont le nombre est variable.
Un argument de mot clé est l'endroit où vous fournissez un nom à la variable lorsque vous la transmettez à la fonction.
On peut considérer les kwargs comme un dictionnaire qui associe chaque mot-clé à la valeur que nous lui transmettons. C'est pourquoi, lorsque nous parcourons les kwargs, il ne semble pas y avoir d'ordre dans lequel ils ont été imprimés.
Exemple1
1 2 3 4 |
def kw(**kwargs): for key, value in kwargs.items(): print("La valeur de ", key , " est " , value) print(kw(a = 3 , b = 2 , c = 5)) |
Ce qui affiche après exécution:
La valeur de a est 3
La valeur de b est 2
La valeur de c est 5
Exemple 2
1 2 3 4 5 |
def voiture( **kwargs): for key, value in kwargs.items(): print(key , " : " , value) print(voiture(marque = "Renault" , couleur = "Rouge" , annee = "2021")) |
marque : Renault
couleur : Rouge
annee : 2021
Younes Derfoufi
CRMEF OUJDA