web-dev-qa-db-fra.com

Formatage de chaîne de paramètres nommés?

Je sais que la question est très simple, mais je ne sais pas comment la rechercher sur Google.

comment puis-je faire

print '<a href="%s">%s</a>' % (my_url)

Pour que my_url est utilisé deux fois? Je suppose que je dois "nommer" le %s puis utilisez un dict dans les paramètres, mais je ne suis pas sûr de la syntaxe appropriée?


juste pour votre information, je sais que je peux juste utiliser my_url _ deux fois dans les paramètres, mais ce n'est pas la question :)

127
mpen
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}
214

Dans Python 2.6+ et Python 3, vous pouvez choisir d'utiliser la méthode de formatage de chaîne la plus récente.

print('<a href="{0}">{0}</a>'.format(my_url))

ce qui vous évite de répéter l'argument, ou

print('<a href="{url}">{url}</a>'.format(url=my_url))

si vous voulez des paramètres nommés.

print('<a href="{}">{}</a>'.format(my_url, my_url))

qui est strictement positionnel, et vient seulement avec l’avertissement que les arguments format () suivent Python règles où les arguments non nommés doivent venir en premier, suivis des arguments nommés, suivis de * args (une séquence comme list ou Tuple) et ensuite * kwargs (un dict tapé avec des chaînes si vous savez ce qui est bon pour vous.) Les points d’interpolation sont déterminés d’abord en substituant les valeurs nommées à leurs libellés, puis en positionnel à partir de ce qui reste. ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, my_url, not_my_url=her_url))

Mais pas ça ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, not_my_url=her_url, my_url))
67
Greg Ball

Solution dans Python 3.6+

Python 3.6 introduit le formatage littéral de chaîne , afin que vous puissiez formater les paramètres nommés sans répéter aucun de vos paramètres nommés en dehors de la chaîne:

print(f'<a href="{my_url:s}">{my_url:s}</a>')

Ceci évaluera my_url, donc si ce n’est pas défini, vous obtiendrez un NameError. En fait, au lieu de my_url, vous pouvez écrire une expression Python) arbitraire, à condition qu’elle soit évaluée comme une chaîne (à cause du :s code de formatage). Si vous voulez une représentation sous forme de chaîne pour le résultat d'une expression qui pourrait ne pas être une chaîne, remplacez :s par !s, comme avec un formatage de chaîne pré-littéral normal.

Pour plus de détails sur le formatage littéral des chaînes, voir PEP 498 , où il a été introduit pour la première fois.

34
gerrit

Pour créer des pages HTML, vous souhaitez utiliser un moteur de modélisation, et non une simple interpolation de chaîne.

5
Mike Graham

Vous serez accro à la syntaxe.

Également en C # 6.0, les développeurs EcmaScript ont également connu cette syntaxe.

In [1]: print '{firstname} {lastname}'.format(firstname='Mehmet', lastname='Ağa')
Mehmet Ağa

In [2]: print '{firstname} {lastname}'.format(**dict(firstname='Mehmet', lastname='Ağa'))
Mehmet Ağa
5
guneysus

En plus du dictionnaire, il peut être utile de connaître le format suivant:

print '<a href="%s">%s</a>' % (my_url, my_url)

Ici, c’est un peu redondant, et le dictionnaire est certainement moins sujet aux erreurs lors de la modification du code, mais il est toujours possible d’utiliser des n-uplets pour plusieurs insertions. La première %s est substitué au premier élément du tuple, au second %s est substitué au deuxième élément du tuple, et ainsi de suite pour chaque élément du tuple.

2
Ponkadoodle