Maison  >  Article  >  développement back-end  >  Comprendre les *args et **kwargs de Python

Comprendre les *args et **kwargs de Python

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 06:53:31453parcourir

Understanding 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.


Les bases de *args

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.

Exemple de *arguments en action

def greet(*args):
    for name in args:
        print(f"Hello, {name}!")

greet('Alice', 'Bob', 'Charlie')

Sortie :

Hello, Alice!
Hello, Bob!
Hello, Charlie!

Explication :

  • La fonction greet accepte n'importe quel nombre d'arguments de position.
  • A l'intérieur de la fonction, args est un tuple contenant tous les arguments passés.
  • Nous parcourons les arguments pour imprimer un message d'accueil pour chaque nom.

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.


Plonger dans les **kwargs

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.

Exemple de **kwargs en action

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 :

  • La fonction display_info accepte n'importe quel nombre d'arguments de mots-clés.
  • À l'intérieur de la fonction, kwargs est un dictionnaire contenant tous les arguments des mots-clés.
  • Nous parcourons kwargs.items() pour imprimer chaque paire clé-valeur.

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é.


Combiner *args et **kwargs

Vous pouvez utiliser à la fois *args et **kwargs dans la même fonction pour accepter tous les types d'arguments.

Exemple d'utilisation combinée

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 :

  • args collecte les arguments de position dans un tuple.
  • *kwargs collecte les arguments des mots-clés dans un dictionnaire.
  • Nous construisons une phrase en joignant des arguments de position et en ajoutant des arguments de mots-clés.

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.


L'ordre des paramètres

Lorsque vous utilisez *args et **kwargs, l'ordre dans lequel vous les placez dans la définition de la fonction est important :

  1. Arguments de position réguliers
  2. arguments
  3. Arguments de mots-clés (ceux sans valeurs par défaut)
  4. Arguments de mots-clés avec valeurs par défaut
  5. *kwargs

Exemple de commande correcte

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 !


Déballage des arguments avec * et **

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.

Exemple de déballage

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 :

  • les nombres décompresse le tuple en arguments positionnels.
  • *détails décompresse le dictionnaire en arguments de mots-clés.

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.


Utilisations pratiques

Interfaces de fonctions flexibles

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='?')

Décorateurs et emballeurs

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.


Erreurs courantes à éviter

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.


Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn