Ce qui est un bel idiome pour ce faire:
Au lieu de:
print "%s is a %s %s that %s" % (name, adjective, noun, verb)
Je veux être capable de faire quelque chose à l'effet de:
print "{name} is a {adjective} {noun} that {verb}"
OriginalL'auteur Lionel | 2011-01-30
locals()
donne une référence à l'espace de noms courant (comme un dictionnaire).**locals()
déballe le dictionnaire en mots clés arguments (f(**{'a': 0, 'b': 1})
estf(a=0, b=1)
)..format()
est "la nouvelle mise en forme de chaîne", qui peut par la façon de faire beaucoup plus (par exemple,{0.name}
pour le nom de l'attribut de la première position d'argument).Sinon,
string.template
(encore une fois, avec des gens si vous voulez éviter une redondance{'name': name, ...}
dict littérale).En fait j'ai été à la recherche pour ce lien, mais a trouvé le PEP première... doit être une faille dans mon algorithme de recherche.
De passage locaux() à une fonction est généralement une très mauvaise idée. Il mène des paramètres de fluage, où il est impossible de dire les variables qui sont en fait destinés à être transmis et qui sont en fait des gens de la région.
+1, très élégant
En général, je suis d'accord ("cette fonction a besoin seulement de x et y, pourquoi devrais-je passer a, b, c et d trop?"). Mais dans ce cas particulier (mettre un peu d'habitants dans une chaîne de modèle), je considère que c'est la meilleure solution (et d'autres, semble être d'accord), en ce qu'elle permet d'éviter la redondance et les feuilles de la chaîne de modèle de l'auto-documentation.
OriginalL'auteur
utilisation
string.Template
Tout ce qu'il faut, non? 🙂
OriginalL'auteur bgporter
Pour python 2:
Pour python 3 ajouter les parenthèses:
Si vous avez besoin d'enregistrer une chaîne, vous aurez pour concaténer avec le
+
opérateur et vous aurez à insérer des espaces.print
insère un espace à tous les,
sauf s'il y a une virgule à la fin de l'paramètre, dans ce cas, il renonce à la nouvelle ligne.Pour enregistrer string var:
Merci fixe delnan.
OriginalL'auteur Ross Rogers