Je sais que c'est une question 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)
Alors c'est my_url
utilisé deux fois? Je suppose que je dois "nommer" le %s
puis utiliser un dict dans les paramètres, mais je ne suis pas sûr de la syntaxe appropriée?
juste pour info, je suis conscient que je peux juste utiliser my_url
deux fois dans les paramètres, mais ce n'est pas le point :)
Réponses:
Dans Python 2.6+ et Python 3, vous pouvez choisir d'utiliser la nouvelle méthode de formatage de chaîne.
ce qui vous évite de répéter l'argument, ou
si vous voulez des paramètres nommés.
qui est strictement positionnel, et vient uniquement avec l'avertissement que les arguments de format () suivent les règles Python où les arguments sans nom doivent venir en premier, suivis des arguments nommés, suivis de * args (une séquence comme une liste ou un tuple) et ensuite * kwargs (un dict 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 étiquettes, puis en positionnant ce qui reste. Donc, vous pouvez aussi faire ceci ...
Mais pas ça ...
la source
"literal {arg1}".format(arg1="arg!")
format nommé fonctionne avec Python 3.5, tandis que le terserf"literal {arg1}"
est une innovation plus récente dans Python 3.6 ou plus récent, AFAIK.la source
'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
Solution en Python 3.6+
Python 3.6 introduit le formatage de chaîne littérale , 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:
Cela évaluera
my_url
, donc s'il n'est pas défini, vous obtiendrez un fichierNameError
. En fait, au lieu demy_url
, vous pouvez écrire une expression Python arbitraire, tant qu'elle s'évalue en 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 n'est peut-être pas une chaîne, remplacez-la:s
par!s
, comme pour le formatage de chaîne pré-littéral normal.Pour plus d'informations sur le formatage de chaîne littérale, consultez PEP 498 , où il a été introduit pour la première fois.
la source
Vous serez accro à la syntaxe.
Aussi C # 6.0, les développeurs EcmaScript ont également familier cette syntaxe.
la source
Pour créer des pages HTML, vous souhaitez utiliser un moteur de création de modèles et non une simple interpolation de chaîne.
la source
render()
méthode? Rien ne dit que vous devez alimenter la sortie du modèleHttpResponse()
. Django est extrêmement polyvalent.En plus de la méthode 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 la méthode du dictionnaire est certainement moins sujette aux erreurs lors de la modification du code, mais il est toujours possible d'utiliser des tuples pour plusieurs insertions. Le premier
%s
est remplacé par le premier élément du tuple, le second%s
est remplacé par le deuxième élément du tuple, et ainsi de suite pour chaque élément du tuple.la source
my_url
c'est en fait un appel de fonction que je ne veux pas avoir à évaluer deux fois. Deux fois, ce n'est pas si mal, mais cela aurait pu facilement être 20 fois :)(get_my_url(), )*20
n'appelle la fonction qu'une seule fois et la duplique 20 fois.