Que sont * args et ** kwargs en Python? Comment l'utiliser?

Texte intégral 2911 Mots, durée estimée de l'étude 9 Procès-verbaux

Source: Pexels

En programmation, les fonctions sont la vie!

En tant que novice en Python, qu'il s'agisse d'un programmeur débutant ou d'une personne familière avec un autre langage, vous devez savoir si le nombre de paramètres dans la définition de fonction correspond au nombre d'arguments que vous souhaitez transmettre.

Ce sont des connaissances de base, elles aident à comprendre le monde.

Cependant, l'exposition aux * args et ** kwargs dans la définition de la fonction peut également amener les novices à rencontrer des obstacles psychologiques au début.

Les deux mots args et kwargs sont souvent vus dans le code en Python, généralement précédé d'un ou deux astérisques.

Ne vous laissez pas tromper par ces déclarations. En fait, ce ne sont pas des paramètres super spéciaux, et ce n'est pas étrange, juste les noms de variables convenus par les programmeurs. Args est l'abréviation d'arguments, ce qui signifie des paramètres de position; kwargs est l'abréviation d'arguments de mot-clé, ce qui signifie des paramètres de mot-clé.

Il s'agit en fait de deux formes de paramètres variables en Python, et * args doit être placé avant ** kwargs, car les paramètres positionnels sont devant les paramètres des mots clés.

Ensuite, nous apprenons à les utiliser spécifiquement.

Paramètres de position vs paramètres de mots clés

Afin d'apprendre ce qu'est * args et ** kwargs, nous devons distinguer deux concepts.

Tout d'abord, distinguez la différence entre les paramètres positionnels et les paramètres des mots clés. Dans la fonction la plus élémentaire, créez un paramètre de jeu 1 correspondant au paramètre 1, le paramètre 2 correspond au paramètre 2, etc.

  • def printThese (a, b, c):
  • print (a, "est stocké dans un")
  • print (b, "est stocké dans b")
  • print (c, "is stored inc") printThese (1,2,3)
  • "" "
  • 1 est stocké dans un
  • 2 est stocké dans b
  • 3 est stocké dans c
  • "" "
  • Les trois paramètres sont requis et l'un d'eux provoquera une erreur.

  • def printThese (a, b, c):
  • print (a, "est stocké dans un")
  • print (b, "est stocké dans b")
  • print (c, "est stocké inc") printThese (1,2)
  • "" "
  • TypeError: printThese () manque 1 argument positionnel requis: 'c'
  • "" "
  • Étant donné une valeur par défaut pour un paramètre dans une définition de fonction, le paramètre deviendra alors un paramètre facultatif.

  • def printThese (a, b, c = None):
  • print (a, "est stocké dans un")
  • print (b, "est stocké dans b")
  • print (c, "est stocké inc") printThese (1,2)
  • "" "
  • 1 est stocké dans un
  • 2 est stocké dans b
  • Aucun n'est stocké dans c
  • "" "
  • De plus, ces paramètres facultatifs deviendront également des mots clés qui peuvent être sélectionnés, puis les noms des paramètres d'appel de fonction peuvent être spécifiés et mappés en conséquence.

    Définissez les valeurs par défaut des trois variables sur Aucun, puis voyez comment mapper sans prendre en compte l'ordre.

  • defprintThese (a = Aucun, b = Aucun, c = Aucun):
  • print (a, "est stocké dans un")
  • print (b, "est stocké dans b")
  • print (c, "est stocké inc") printThese (c = 3, a = 1)
  • "" "
  • def printThese (a = Aucun, b = Aucun, c = Aucun):
  • print (a, "est stocké dans un")
  • print (b, "est stocké dans b")
  • print (c, "est stocké inc") printThese (c = 3, a = 1)
  • "" "
  • 1 est stocké dans un
  • Aucun n'est stocké dans b
  • 3 est stocké dans c
  • "" "
  • Opérateur Splat

    Source: Pexels

    Commencez par dire que j'aime aussi le nom de l'opérateur ... visualisation. * Souvent lié aux opérations de multiplication, mais en Python, c'est le double de l'opérateur splat.

    L'opérateur est comme une boîte de couleur. L'auteur considère que l'opérateur d'extension - l'équivalent JavaScript de splat - ce processus peut être vu comme ouvrant un domino pour former une séquence plus grande, mais splat a besoin d'une analogie plus puissante.

    L'exemple suivant est plus facile à expliquer clairement.

  • a =
  • b = imprimer (b) #
  • Dans l'exemple de code, déplacez (décompressez) le contenu de a dans la nouvelle liste b.

    Comment utiliser * args et ** kwargs

    Nous savons que l'opérateur splat décompresse plusieurs valeurs et qu'il existe deux types de paramètres de fonction. Si vous ne l'avez pas encore compris, vous pouvez comprendre * args comme abréviation d'arguments et ** kwargs comme abréviation d'arguments de mots clés.

    Chaque paramètre est utilisé pour décompresser son type d'argument respectif, permettant des appels de fonction à l'aide de listes d'arguments de longueur de mot variable. Par exemple, créez une fonction qui représente le résultat du test d'un élève.

  • def printScores (étudiant, * scores):
  • caractères imprimés (f "Nom de l'étudiant: {étudiant}")
  • pour le score en scores:
  • print (partition) printScores ("Jonathan", 100, 95, 88, 92, 99)
  • "" "
  • Nom de l'étudiant: Jonathan
  • 100
  • 95
  • 88
  • 92
  • 99
  • "" "
  • Oh attendez, je ne l'ai pas appelé * args? Oui, "args" est une spécification standardisée, mais ce n'est encore qu'un nom. En fait, dans * args, le seul astérisque est le véritable participant, créant une liste dont le contenu est les paramètres positionnels de l'appel de fonction (après ces arguments de définition).

    Une fois que cela est clair, les ** kwargs sont faciles à comprendre. Le nom n'est pas important, ce qui compte c'est que le double astérisque crée le dictionnaire, dont le contenu est les arguments de mot-clé, qui proviennent de l'appel de fonction (après ces arguments de définition).

    Pour une meilleure démonstration, nous créons une fonction qui génère une liste de personnes qui ont passé le test national d'anglais.

  • def printPetNames (propriétaire, ** animaux):
  • imprimer (f "Nom du propriétaire: {propriétaire}")
  • pour animal de compagnie, nom dans pets.items ():
  • print (f "{pet}: {name}") printPetNames ("Jonathan", dog = "Brock", fish =, turtle = "Shelldon") "" "
  • Le nom du propriétaire: Jonathan
  • chien: Brock
  • poisson:
  • tortue: Shelldon
  • "" "
  • Source: Pexels

    Enfin, offrez-vous des "avantages de connaissances" supplémentaires.

    Les remarques suivantes peuvent vous aider à éviter les pièges courants et à approfondir vos connaissances.

    · Utiliser * args et ** kwargs comme spécifications normalisées pour saisir les paramètres de position et les paramètres de mot-clé;

    · Ne mettez pas ** kwargs avant * args, sinon une erreur se produira;

    · Clairement conscient du conflit entre les paramètres de mot-clé et ** kwargs. Cette valeur transmettait à l'origine la signification de ** kwarg, mais elle est devenue le nom du paramètre de mot-clé de façon peu claire;

    · L'opérateur splat peut être utilisé dans les appels de fonction.

    laissez un commentaire

    Partageons ensemble les produits de base de l'apprentissage et du développement de l'IA

    Si réimprimé, veuillez laisser un message en arrière-plan et suivre les spécifications de réimpression

    L'intelligence artificielle, Dix tendances de 2020 obligatoire
    Précédent
    De facile à difficile, osez-vous défier 6 problèmes de programmation représentatifs? (Avec plan de réponse)
    Prochain
    Aujourd'hui, le son de base | dur juste à la fin? Apple prépare une action en justice pour déverrouiller iPhone
    Comment réussir chef des données - créer de la valeur à partir des données grâce à l'automatisation
    La fin a été touché par des mises à pied! La rémunération, les prix de fin d'année ne peut que « la difficulté en allouant » il?
    Apprendre à observer réseau de neurones: activer la totalité de la couche de convolution de formation de visualisation de modèle
    son coeur aujourd'hui | premier robot vivant! Les scientifiques de créer des cellules souches dans Robot vivo grenouille
    Comment renforcer la sécurité du réseau? Objet de la protection est vos meilleurs manuels
    G4345 train et le chemin du retour: lui et sa petite amie de licence, et il a dit, « la séparation est difficile »
    Guangdong étudiants qui étudient en Angleterre à la maison de retour à l'esprit: pas tout le chemin du médicament masque, prenez pour prévenir et grand-père vivent séparés de leur famille
    Wuhan « crachats nettoyer la division »: Le médecin couronnera un nouveau endoscope vers le bas dans les poumons des patients atteints d'une pneumonie
    Les animaux ont commencé à remettre en question le test! Guangdong couronne de nouvelles recherches sur l'efficacité de la phase d'évaluation des vaccins
    14 ensembles de 42 millions de yuans / ensembles maison de départ, 8 secondes Steal! luxe et de salve Shenzhen
    Roundup: les feux de forêt qui fait rage en Australie pour fournir de nouveaux organismes de secours