Comprendre Args et Kwargs en Python

Dans ce tutoriel, je vais me concentrer sur les arguments (* args) et des arguments de mots clés (* kwargs) en Python.

Je vais vous apprendre ce que sont les arguments et les kwargs et, plus important encore, comment les utiliser. C'est comment intégrer un nombre illimité d'arguments et d'arguments de mots clés dans des fonctions..

Que sont les args??

* args sont utilisés pour passer mot-clé arguments. Exemples de non-mot-cléles arguments sont fun (3,4), fun ("foo", "bar").

* args sont généralement utilisés comme mesure pour empêcher le programme de planter si nous ne savons pas combien d'arguments seront passés à la fonction. Ceci est utilisé en C ++ ainsi que dans d'autres langages de programmation.

Que sont les Kwargs??

** kwargs est un dictionnaire d'arguments de mots clés. le ** nous permet de passer n'importe quel nombre d'arguments de mots clés. Un argument de mot clé est fondamentalement un dictionnaire.

Un exemple de mot clél'argument est amusant (foo = 2, bar = 7).

** kwargs sont comme * args sauf que vous déclarez les variables et le montant dans la fonction arguments.

Où utiliser Args et Kwargs

Les args et les kwargs sont utiles lorsque vous voulez:

  • Réduire la réécriture du code.
  • Rendre votre code lisible.
  • Réutilisez votre code

Utiliser Args et Kwargs dans les fonctions

Regardons comment kwargs et args sont utilisés dans des fonctions.

Args

La fonction ci-dessous prend trois arguments. Les trois arguments ont été explicitement définis, donc plus ou moins provoquera une erreur dans le programme.

def add (a, b, c): print (a + b + c) print add (2,3,4) 

Lançons la fonction. La fonction ajoutera les trois nombres, donnant le résultat suivant:

Sortie 9

Et si nous passions quatre arguments dans la fonction au lieu des trois requis? Nous allons recevoir une erreur comme indiqué ci-dessous.

En effet, seuls trois paramètres ont été définis dans la fonction, mais nous avons passé quatre arguments de position lors de l'appel de la fonction..

def add (a, b, c): print (a + b + c) print add (2,3,4,5) 
TypeError en sortie: add () prend 3 arguments de position mais 4 ont été donnés 

Dans le deuxième exemple ci-dessous, le * est pour mot-clé arguments et est passé dans la fonction. Au lieu d'avoir des arguments définis, nous remplaçons une, b et c avec un seul paramètre (* args).

Remarquez comment l'utilisation de * args il est facile d'utiliser n'importe quel nombre d'arguments sans avoir à changer votre code. * args fournissez plus de flexibilité à votre code car vous pouvez avoir autant d'arguments que vous le souhaitez à l'avenir.

def add (* args): total = 0 pour arg dans args: total + = arg affiche le total 
Scénario 1 print add (1,2,5) Output 8 
Scénario 2 print add (1,2,5,6) output 14 
Scénario 3 ajouter add (1,2,5,8) Sortie 16

Plus d'exemples

Créez une fonction simple comme indiqué:

def func (* args): # * args signifie quel que soit le nombre d'arguments pris, il les intercepte tous pour arg dans les arguments: print arg 

Testez la fonction en utilisant une combinaison d'entiers et de chaînes:

def func (* args): # * args signifie quel que soit le nombre d'arguments que vous prenez, il les intercepte tous pour arg en arguments: print arg print func (11,3,4,5, "tuts") 
Sortie 11 3 4 5 tuts

Et si on passait une liste comme argument? Testez la fonction avec une liste en remplaçant les arguments précédents par une liste,  l = [11,3,4,5, "tuts".

def func (* args): # * args signifie quel que soit le nombre d'arguments que vous prenez, il les intercepte tous pour arg dans les arguments: print arg l = [11,3,4,5, "tuts"] print func (l ) 
Ceci imprime la liste dans son ensemble, car il interprète la liste comme un élément. Sortie [11,3,4,5, "tuts]

À partir de l'exemple ci-dessus, vous pouvez également utiliser * args pour décompresser les arguments qui sont déjà dans une liste ou un tuple afin que tous les éléments de la liste soient passés en tant que paramètres différents.

En utilisant la même fonction:

def func (* args): # * args signifie quel que soit le nombre d'arguments que vous prenez, il les intercepte tous pour arg dans les arguments: print (arg) l = [11,3,4,5, "tuts"] print ( func (* l)) 
Le * décompactera la liste et affichera chaque élément de la liste. Sortie 11 3 4 5 tuts

Kwargs

Kwargs vous permettent de passer des arguments de mots clés à une fonction. Ils sont utilisés lorsque vous n'êtes pas sûr du nombre d'arguments de mots clés qui seront passés dans la fonction..

Écrire une fonction mon_fonc et passer dans (x = 10, y = 20) comme mot clé arguments comme ci-dessous:

def my_func (x = 10, y = 20): affiche x, y
Ceci affiche les valeurs de x et y. Sortie 10,20

Kwargs peut être utilisé pour décompresser des clés de dictionnaire, des paires de valeurs. Ceci est fait en utilisant la notation double astérisque (**). Il est important de noter que chaque clé doit être associée à une valeur.

Voici un exemple typique de la façon dont c'est fait. La fonction ci-dessous prend les pays comme clés et leurs capitales comme valeurs. Il imprime ensuite une déclaration qui itère sur les kwargs et mappe chaque mot clé à la valeur qui lui est attribuée..

def capital_cities (** kwargs): # initialise une liste vide pour stocker le résultat result = [] pour la clé, la valeur dans kwargs.items (): result.append ("La capitale de  est  .format (clé , valeur) retourne le résultat

Vous pouvez appeler la fonction avec les arguments de votre choix.

def capital_cities (** kwargs): # initialise une liste vide pour stocker le résultat result = [] pour la clé, la valeur dans kwargs.items (): result.append ("La capitale de  est  .format (clé , valeur) retourne le résultat print capital_city (China = "Beijing", Cairo = "Egypt", Rome = "Italy"))
sortie ['La capitale de la Chine est Beijing', 'La capitale du Caire est l'Egypte', 'La capitale de Rome est l'Italie'] 

Pour un exemple plus complexe, supposons que nous ayons un modèle pour un client qui ressemble à ceci:

classe Customer (models.Model): prenom = models.CharField (max_length = 100, null = True) last_name = models.CharField (max_length = 100) username = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) password = models.CharField (max_length = 100)

Vous pouvez utiliser kwargs pour effectuer à la fois des entrées de données et des requêtes de données à partir d'objets de modèle. Ecrivons une vue de fonction pour créer un nouveau client.

kwargs = "first_name": "John", "last_name": "Doe", "nom d'utilisateur": "johndoe", "email" [email protected] "," mot de passe ":" 1234 " new_user = User (* * kwargs) new_user.save ()

Voici comment effectuer une requête sur le client que nous venons de créer avec kwargs.

filter_customer = 'email': [email protected], 'nom d'utilisateur': johndoe, Customer.objects.filter (** filter_customer)

Utiliser les deux args et kwargs dans une fonction

Lors de l'utilisation des arguments arg et kwargs dans la même définition de fonction, * args doit se produire avant ** kwargs

class MyFunction (Foo): def __init __ (self, * args, ** kwargs): affiche 'ma fonction' super (MyFunction, self) .__ init __ (* args, ** kwargs)

Exemple:

def Func (* args, ** kwargs): pour arg dans args: print arg pour item dans kwargs.items (): print item

Rappelles toi args devrait venir avant Kwargs.

def Func (* args, ** kwargs): pour arg dans args: print arg pour item dans kwargs.items (): print item print Func (1, x = 7, u = 8)
Sortie 1 ('x', 7) ('u', 8)

Conclusion

J'espère que ce tutoriel vous a aidé à comprendre les arguments et les kwargs.

Vous trouverez ci-dessous quelques indications à prendre en compte lors de l’utilisation d’args et de kwargs:

  • * args et ** kwargs syntaxe spéciale utilisée dans les fonctions pour transmettre un nombre variable d'arguments à une fonction.
  • * args se produire avant ** kwargs dans une définition de fonction.
  • * args et ** kwargs sont mieux utilisés dans des situations où le nombre d'entrées restera relativement petit.
  • Vous pouvez utiliser le nom de votre choix. args et Kwargs ne sont que par convention et non une exigence. Par exemple, vous pouvez utiliser * foo au lieu de * args ou ** foo au lieu de ** kwargs.

La documentation officielle de Python offre de nombreuses informations à approfondir. De plus, n'hésitez pas à voir ce que nous avons disponible à la vente et à étudier sur le marché, et n'hésitez pas à poser des questions et à fournir vos précieux commentaires en utilisant le flux ci-dessous.