En Python, les *args
et **kwargs
sont des fonctionnalités puissantes et flexibles qui permettent de passer un nombre variable d’arguments à une fonction. Ils sont couramment utilisés dans les situations où le nombre d’arguments n’est pas connu à l’avance ou peut varier.
Commençons par *args
. Le *
devant le nom args
signifie que tous les arguments positionnels supplémentaires passés à la fonction seront collectés dans un tuple. Ainsi, dans la signature d’une fonction, *args
permet de capturer un nombre variable d’arguments positionnels. Voici un exemple :

pythondef my_function(*args):
for arg in args:
print(arg)
my_function(1, 2, 3, 4, 5)
Dans cet exemple, la fonction my_function
peut accepter un nombre variable d’arguments positionnels. Lorsqu’elle est appelée avec my_function(1, 2, 3, 4, 5)
, les nombres 1, 2, 3, 4 et 5 sont collectés dans le tuple args
, et la fonction les imprime un par un.
Maintenant, passons à **kwargs
. Le **
devant le nom kwargs
signifie que tous les arguments clé-valeur supplémentaires passés à la fonction seront collectés dans un dictionnaire. Ainsi, dans la signature d’une fonction, **kwargs
permet de capturer un nombre variable d’arguments nommés. Voici un exemple :
pythondef my_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
my_function(name="Alice", age=30, city="New York")
Dans cet exemple, la fonction my_function
peut accepter un nombre variable d’arguments nommés. Lorsqu’elle est appelée avec my_function(name="Alice", age=30, city="New York")
, les paires clé-valeur sont collectées dans le dictionnaire kwargs
, et la fonction les imprime en affichant chaque clé et sa valeur.
Maintenant, combinons les deux pour créer des fonctions encore plus flexibles. Voici un exemple :
pythondef my_function(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f"{key}: {value}")
my_function(1, 2, 3, name="Alice", age=30)
Dans cet exemple, la fonction my_function
peut accepter à la fois des arguments positionnels et des arguments nommés. Lorsqu’elle est appelée avec my_function(1, 2, 3, name="Alice", age=30)
, les arguments positionnels sont collectés dans args
(1, 2, 3) et les arguments nommés sont collectés dans kwargs
(name= »Alice », age=30). La fonction imprime ensuite les valeurs de args
et kwargs
.
En résumé, l’utilisation de *args
et **kwargs
en Python permet de créer des fonctions flexibles capables de gérer un nombre variable d’arguments, que ce soient des arguments positionnels ou nommés. Cela rend le code plus générique, réutilisable et facile à étendre.
Plus de connaissances
Bien sûr, plongeons un peu plus en détail dans l’utilisation et les applications des *args
et **kwargs
en Python.
Commençons par *args
:
-
Passage d’un nombre variable d’arguments positionnels : L’une des utilisations les plus courantes de
*args
est de permettre à une fonction de recevoir un nombre variable d’arguments positionnels sans avoir à les spécifier individuellement dans la signature de la fonction. Cela rend la fonction plus flexible et adaptable à différents scénarios. -
Déballage d’une liste ou d’un tuple d’arguments : Vous pouvez également utiliser
*
pour déballer une liste ou un tuple d’arguments et les passer à une fonction en tant qu’*args
. Par exemple :
pythonargs_list = [1, 2, 3]
my_function(*args_list)
Dans cet exemple, les éléments de args_list
sont déballés et passés comme arguments positionnels à my_function
.
- Combinaison avec d’autres arguments : Vous pouvez combiner
*args
avec d’autres arguments dans la signature de la fonction, mais assurez-vous que*args
est placé en dernier dans la liste des arguments pour éviter des erreurs de syntaxe.
Passons maintenant à **kwargs
:
-
Passage d’un nombre variable d’arguments nommés : De manière similaire à
*args
, l’utilisation de**kwargs
permet à une fonction de recevoir un nombre variable d’arguments nommés sans avoir à les spécifier individuellement dans la signature de la fonction. -
Déballage d’un dictionnaire d’arguments : Vous pouvez utiliser
**
pour déballer un dictionnaire d’arguments et les passer à une fonction en tant que**kwargs
. Par exemple :
pythonkwargs_dict = {'name': 'Alice', 'age': 30}
my_function(**kwargs_dict)
Dans cet exemple, les paires clé-valeur de kwargs_dict
sont déballées et passées comme arguments nommés à my_function
.
-
Combinaison avec d’autres arguments : Comme avec
*args
, vous pouvez combiner**kwargs
avec d’autres arguments dans la signature de la fonction, mais assurez-vous que**kwargs
est placé en dernier dans la liste des arguments. -
Utilisation dans la définition de fonctions génériques : Les
**kwargs
sont particulièrement utiles lors de la définition de fonctions génériques qui doivent être capables de traiter un large éventail d’arguments nommés. Cela permet une grande flexibilité dans la façon dont la fonction est appelée et utilisée.
En résumé, l’utilisation judicieuse de *args
et **kwargs
permet de rendre les fonctions Python plus flexibles, génériques et réutilisables. Ils sont largement utilisés dans de nombreux frameworks et bibliothèques Python pour créer des API et des fonctions génériques capables de gérer un large éventail de situations d’utilisation.