Ich weiß, dass es eine wirklich einfache Frage ist, aber ich habe keine Ahnung, wie ich sie googeln soll.
wie kann ich
print '<a href="%s">%s</a>' % (my_url)
Das wird also my_url
zweimal verwendet? Ich nehme an, ich muss das "benennen" %s
und dann ein Diktat in den Parametern verwenden, bin mir aber nicht sicher, welche Syntax richtig ist?
Nur zu my_url
Ihrer Information , ich bin mir bewusst, dass ich nur zweimal in den Parametern verwenden kann, aber das ist nicht der Punkt :)
Antworten:
In Python 2.6+ und Python 3 können Sie die neuere Formatierungsmethode für Zeichenfolgen verwenden.
das erspart Ihnen das Wiederholen des Arguments, oder
wenn Sie benannte Parameter möchten.
Dies ist streng positionell und nur mit dem Vorbehalt verbunden, dass format () -Argumente Python-Regeln folgen, bei denen unbenannte Argumente zuerst kommen müssen, gefolgt von benannten Argumenten, gefolgt von * args (eine Sequenz wie Liste oder Tupel) und dann * kwargs (ein Diktat) mit Strings verschlüsselt, wenn Sie wissen, was für Sie gut ist). Die Interpolationspunkte werden zuerst durch Ersetzen der benannten Werte an ihren Beschriftungen und dann durch Positionieren von den verbleibenden Werten bestimmt. Sie können dies also auch tun ...
Aber nicht das ...
quelle
"literal {arg1}".format(arg1="arg!")
genannte Format funktioniert mit Python 3.5, während der Terserf"literal {arg1}"
eine neuere Innovation in Python 3.6 oder neuer, AFAIK, ist.quelle
'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
Lösung in Python 3.6+
Python 3.6 führt die Formatierung von Literalzeichenfolgen ein , sodass Sie die benannten Parameter formatieren können , ohne Ihre benannten Parameter außerhalb der Zeichenfolge zu wiederholen:
Dies wird ausgewertet
my_url
. Wenn es nicht definiert ist, erhalten Sie eineNameError
. Stattdessenmy_url
können Sie stattdessen einen beliebigen Python-Ausdruck schreiben, sofern dieser als Zeichenfolge ausgewertet wird (aufgrund des:s
Formatierungscodes). Wenn Sie eine Zeichenfolgendarstellung für das Ergebnis eines Ausdrucks wünschen, der möglicherweise keine Zeichenfolge ist, ersetzen Sie diese:s
durch eine!s
reguläre vorliterale Zeichenfolgenformatierung.Ausführliche Informationen zur Formatierung von Literalzeichenfolgen finden Sie in PEP 498 , wo es erstmals eingeführt wurde.
quelle
Sie werden von der Syntax abhängig sein.
Auch EcmaScript-Entwickler, C # 6.0, kennen diese Syntax.
quelle
Zum Erstellen von HTML-Seiten möchten Sie eine Vorlagen-Engine verwenden, keine einfache Zeichenfolgeninterpolation.
quelle
render()
Methode zu generieren ? Nichts sagt, dass Sie die Vorlagenausgabe füttern müssenHttpResponse()
. Django ist peinlich vielseitig.Neben dem Wörterbuch kann es nützlich sein, das folgende Format zu kennen:
print '<a href="%s">%s</a>' % (my_url, my_url)
Hier ist es ein bisschen redundant, und die Wörterbuchmethode ist sicherlich weniger fehleranfällig, wenn der Code geändert wird, aber es ist immer noch möglich, Tupel für mehrere Einfügungen zu verwenden. Das erste
%s
ersetzt das erste Element im Tupel, das zweite%s
das zweite Element im Tupel usw. für jedes Element im Tupel.quelle
my_url
eigentlich ein Funktionsaufruf, den ich nicht zweimal auswerten möchte. Zweimal ist nicht so schlimm, aber es hätte einfach 20 Mal sein können :)(get_my_url(), )*20
Ruft die Funktion aus Redundanzgründen nur einmal auf und dupliziert sie 20 Mal.