Maison > Article > développement back-end > Comprendre les *args et **kwargs de Python
Python est réputé pour sa simplicité et sa flexibilité, qui viennent souvent de sa capacité à gérer des fonctions avec un nombre variable d'arguments.
Deux symboles spéciaux, *args et **kwargs, jouent un rôle central dans cette flexibilité.
Dans cet article, nous explorerons la signification de ces symboles, comment les utiliser et pourquoi ils sont si puissants.
Le paramètre *args permet à une fonction d'accepter n'importe quel nombre d'arguments de position.
L'astérisque (*) indique à Python que tous les arguments de position doivent être rassemblés dans un tuple.
def greet(*args): for name in args: print(f"Hello, {name}!") greet('Alice', 'Bob', 'Charlie')
Sortie :
Hello, Alice! Hello, Bob! Hello, Charlie!
Explication :
Quand j'ai découvert *args pour la première fois, j'avais l'impression de débloquer un nouveau niveau dans un jeu vidéo. Tellement plus simple de définir une fonction.
De même, **kwargs permet à une fonction d'accepter n'importe quel nombre d'arguments de mots-clés.
Les doubles astérisques (**) indiquent à Python de collecter tous les arguments de mots-clés dans un dictionnaire.
def display_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") display_info(name='Alice', age=30, city='New York')
Sortie :
name: Alice age: 30 city: New York
Explication :
L'utilisation de **kwargs a été une bouée de sauvetage lorsqu'il s'agit de fonctions qui nécessitent un ensemble flexible de paramètres nommés. Cela garde mon code propre et organisé.
Vous pouvez utiliser à la fois *args et **kwargs dans la même fonction pour accepter tous les types d'arguments.
def make_sentence(*args, **kwargs): sentence = ' '.join(args) for key, value in kwargs.items(): sentence += f" {key} {value}" print(sentence) make_sentence('I', 'love', 'Python', exclamation='!', emoji='?')
Sortie :
I love Python exclamation ! emoji ?
Explication :
Mélanger *args et **kwargs, c'est comme cuisiner avec tous les bons ingrédients : vous pouvez ajuster la recette à votre guise sans casser le plat.
Lorsque vous utilisez *args et **kwargs, l'ordre dans lequel vous les placez dans la définition de la fonction est important :
def greet(*args): for name in args: print(f"Hello, {name}!") greet('Alice', 'Bob', 'Charlie')
Exemple de commande incorrecte
Hello, Alice! Hello, Bob! Hello, Charlie!
J'ai trébuché sur cette commande plus de fois que je ne voudrais l'admettre. Revérifier l'ordre des paramètres permet de gagner beaucoup de temps de débogage !
Les astérisques ne sont pas seulement utiles dans les définitions de fonctions mais également lors de l'appel de fonctions.
Ils peuvent décompresser des séquences et des dictionnaires en arguments.
def display_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") display_info(name='Alice', age=30, city='New York')
Sortie :
name: Alice age: 30 city: New York
Explication :
Cette fonctionnalité a rendu mon code beaucoup plus propre, en particulier lorsqu'il s'agit de données qui proviennent naturellement de listes ou de dictionnaires.
Lorsque vous souhaitez qu'une fonction gère un nombre variable d'entrées sans modifier la signature de la fonction.
def make_sentence(*args, **kwargs): sentence = ' '.join(args) for key, value in kwargs.items(): sentence += f" {key} {value}" print(sentence) make_sentence('I', 'love', 'Python', exclamation='!', emoji='?')
Lorsque vous écrivez des décorateurs, vous ne connaissez souvent pas le nombre d'arguments que la fonction encapsulée recevra.
I love Python exclamation ! emoji ?
Les décorateurs sont l'une de mes fonctionnalités préférées en Python, et *args et **kwargs les rendent possibles.
Paramètres égarés : Assurez-vous que *args et **kwargs sont correctement placés dans la signature de la fonction.
Utilisation excessive : Bien que *args et **kwargs soient puissants, leur utilisation excessive peut rendre votre code difficile à comprendre.
Oublier les astérisques : N'oubliez pas que les arguments et les kwargs ne sont que des conventions. Les astérisques (*, **) sont ce qui les rend spéciaux.
def func(a, b, *args, **kwargs): pass
L’équilibre est la clé. Bien qu'il soit tentant d'utiliser *args et **kwargs partout, les paramètres explicites sont parfois plus clairs.
Comprendre *args et **kwargs ouvre un monde de possibilités dans la programmation Python.
Ils offrent la flexibilité d'écrire des fonctions capables de gérer un nombre arbitraire d'arguments, rendant votre code plus dynamique et adaptable.
Maîtriser *args et **kwargs a été un tournant dans mon parcours Python.
Cela a rendu le codage plus agréable et mes programmes plus robustes. Si vous n'avez pas encore exploré ces fonctionnalités, je vous recommande vivement de vous y plonger !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!