les chaînes de format et les arguments nommés en Python
Cas 1:
"{arg1} {arg2}".format (10, 20)
Il donnera KeyError: 'arg1'
parce que je ne voulais pas passer les arguments nommés.
Cas 2:
"{arg1} {arg2}".format(arg1 = 10, arg2 = 20)
Maintenant, il va fonctionner correctement car j'ai passé les arguments nommés.
Et il imprime '10 20'
Cas 3:
Et, Si je passe faux nom, il va montrer KeyError: 'arg1'
"{arg1} {arg2}".format(wrong = 10, arg2 = 20)
Mais,
Cas 4:
Si je passe les arguments nommés dans mauvais ordre
"{arg1} {arg2}".format(arg2 = 10, arg1 = 20)
Il fonctionne...
et il imprime '20 10'
Ma question est pourquoi il fonctionne et ce qui est de l'utilisation de arguments nommés dans ce cas.
- Je pense qu'ils sont juste là pour des raisons de lisibilité.
- Parce que sa recherche par nom plutôt que de la position...que pensez-vous des arguments nommés signifie?
- Il semble que vous simplement renommé arg2 de arg1 et vice versa. en d'autres termes arg1 est maintenant de 20 au lieu de 10, c'est pourquoi vous voyez le premier nombre de votre chaîne d'impression de 20 au lieu de 10. Pour faire le test que vous avez voulu, vous avez besoin simplement de déplacer les arguments ET leurs valeurs à la nouvelle position dans le format() appeler et il se comporterait de la même façon que vous attendez. Rien n'est hors de l'ordinaire ici.
Vous devez vous connecter pour publier un commentaire.
Nommé en remplacement des champs (la
{...}
pièces dans un chaîne de format) match contre mot-clé arguments à la.format()
méthode, et pas les arguments de position.Mot-clé arguments sont comme des clés dans un dictionnaire; l'ordre n'a pas d'importance, car ils sont mis en correspondance avec un nom.
Si vous voulais match contre de position arguments, utilisez les numéros:
En Python 2.7 et le haut, vous pouvez omettre les nombres; le
{}
remplacement champs sont alors automatiquement numérotées par ordre d'apparition dans la chaîne de mise en forme:La chaîne de mise en forme peut correspondre à l'encontre à la fois de position et mot-clé arguments, et peut utiliser des arguments plusieurs fois:
Citant le format de spécification de la chaîne:
C'est moi qui souligne.
Si vous êtes à la création d'une grande chaîne de mise en forme, il est souvent beaucoup plus lisible et maintenable à utiliser nommé en remplacement de champs, de sorte que vous n'avez pas à continuer à compter les arguments et comprendre à quel argument va où dans la chaîne résultante.
Vous pouvez également utiliser le
**keywords
syntaxe d'appel d'appliquer un dictionnaire déjà existant à un format, le rendant facile de transformer un fichier CSV dans une sortie formatée:Ici,
picture
,link
,description
etprice
sont de toutes les clés dans larow
dictionnaire, et il est beaucoup plus facile pour voir ce qui se passe lorsque j'applique lerow
de la chaîne de mise en forme.