Ich verstehe, dass wir verwenden sollten, %s
um eine Zeichenfolge zu verketten, anstatt +
in Python.
Ich könnte Folgendes tun:
hello = "hello"
world = "world"
print hello + " " + world
print "%s %s" % (hello, world)
print "{} {}".format(hello, world)
print ' '.join([hello, world])
Aber warum sollte ich etwas anderes als das verwenden +
? Es ist schneller, Verkettung mit einem einfachen zu schreiben +
. Wenn Sie sich dann die Formatierungszeichenfolge ansehen, geben Sie die Typen eg %s
und %d
und so an. Ich verstehe, es könnte besser sein, explizit über den Typ zu sprechen.
Aber dann habe ich gelesen, dass das Verwenden +
für die Verkettung vermieden werden sollte, obwohl es einfacher zu tippen ist. Gibt es einen klaren Grund, warum Zeichenfolgen auf eine dieser anderen Arten verkettet werden sollten?
%s
dient nicht der Verkettung, sondern ist eine Konvertierungsspezifikation für die Formatierung von Zeichenfolgen, die von C abgeleitet istprintf(3)
. Es gibt Fälle, in denen Sie diesen oder einen Verkettungsoperator verwenden müssen. Was Sie verwenden, sollte auf der Beurteilung der Situation beruhen, nicht auf einem Dogma. Wie einfach es ist, den Code zu schreiben, ist völlig irrelevant, da Sie dies nur einmal tun werden.print(f"{hello} {world}")
, hat Lesbarkeit der Verkettung, da Variablen dort angezeigt werden, wo sie in der Zeichenfolge vorkommen, und ist schneller alsstr.format
.Antworten:
Lesbarkeit. Die Formatstringsyntax ist besser lesbar, da sie den Stil von den Daten trennt. In Python
%s
erzwingt die Syntax automatisch alle Nicht-str
Typen vonstr
; während Verkettung funktioniert nur mitstr
, und Sie können nicht verkettenstr
mitint
.Performance. In Python
str
ist unveränderlich, so dass die linke und rechte Zeichenfolge für jedes Paar der Verkettung in die neue Zeichenfolge kopiert werden müssen. Wenn Sie vier Zeichenfolgen mit der Länge 10 verketten, kopieren Sie (10 + 10) + (10 + 10) + 10) + ((10 + 10) + 10) + 10) = 90 Zeichen anstelle von nur 40 Zeichen Figuren. Und mit zunehmender Anzahl und Größe der Saite wird es quadratisch schlimmer. Java optimiert diesen Fall manchmal, indem es die zu verwendende Verkettungsserie umwandeltStringBuilder
, CPython jedoch nicht.In einigen Anwendungsfällen stellt die Protokollierungsbibliothek eine API bereit, die Formatzeichenfolgen verwendet, um die Zeichenfolge für Protokolleinträge träge (
logging.info("blah: %s", 4)
) zu erstellen . Dies ist ideal für eine verbesserte Leistung, wenn die Protokollbibliothek feststellt, dass der aktuelle Protokolleintrag von einem Protokollfilter verworfen wird, sodass die Zeichenfolge nicht formatiert werden muss.quelle
Bin ich der einzige, der von links nach rechts liest?
Verwenden
%s
ist für mich wie das Hören von Deutschsprechern, bei denen ich bis zum Ende eines sehr langen Satzes warten muss, um zu hören, was das Verb ist.Was ist auf einen Blick klarer?
oder
quelle
n
Jahrzehnten funktioniert mein Verstand auch so ;-) Aber ich stehe immer noch zu meiner Antwort, die zweite ist klarer und leichter zu lesen, daher zu pflegen. Und das wird umso deutlicher, je mehr Parameter Sie haben. Wenn es sich letztendlich um eine One-Man-Show handelt, sollten Sie sich an das halten, mit dem Sie vertraut und vertraut sind. Wenn es sich um eine Teamleistung handelt, setzen Sie Konsistenz- und Codeüberprüfungen durch. Die Leute können sich daran gewöhnen.f"your {object} is in the {location}"
."your '" + object + "' is in the '" + location + "'"
... Ich bin mir nicht mal sicher, ob ich das gerade richtig verstanden habe ...Ein Beispiel zur Verdeutlichung der Lesbarkeit:
(Beachten Sie, dass das zweite Beispiel nicht nur besser lesbar ist, sondern auch einfacher zu bearbeiten ist. Sie können die Vorlage in einer Zeile und die Liste der Variablen in einer anderen ändern.)
Ein separates Problem ist, dass% s-Code auch in die Zeichenfolge konvertiert wird. Andernfalls müssen Sie den Aufruf str () verwenden, der auch weniger lesbar ist als ein% s-Code.
quelle
Die Verwendung
+
sollte im Allgemeinen nicht vermieden werden. In vielen Fällen ist der richtige Ansatz. Die Verwendung von%s
oder.join()
ist nur in bestimmten Fällen vorzuziehen, und es ist normalerweise ziemlich offensichtlich, wann sie die bessere Lösung sind.In Ihrem Beispiel verknüpfen Sie drei Zeichenfolgen miteinander, und die Verwendung des Beispiels
+
ist eindeutig die einfachste und am besten lesbare und daher die empfohlene.%s
oder.format()
sind nützlich, wenn Sie Zeichenfolgen oder Werte in der Mitte einer größeren Zeichenfolge interpolieren möchten . Beispiel:In diesem Fall ist die Verwendung
%s
besser lesbar, da Sie vermeiden, die erste Zeichenfolge in mehrere Segmente zu teilen. Besonders wenn Sie mehrere Werte interpolieren..join()
Dies ist sinnvoll, wenn Sie eine Folge von Zeichenfolgen variabler Größe haben und / oder mehrere Zeichenfolgen mit demselben Trennzeichen verketten möchten.quelle
Da sich die Wortreihenfolge in verschiedenen Sprachen ändern kann, ist das Formular mit
%s
unbedingt erforderlich, wenn Sie die Übersetzung von Zeichenfolgen in Ihrer Software ordnungsgemäß unterstützen möchten.quelle