Wie würden Sie eine lange Zeile wie diese formatieren? Ich möchte, dass es nicht mehr als 80 Zeichen breit ist:
logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))
Ist das meine beste Option?
url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))
python
formatting
code-formatting
Gattster
quelle
quelle
indexes
: der richtige Plural vonindex
istindices
.Antworten:
Das ist ein Anfang. Es ist keine schlechte Praxis, Ihre längeren Zeichenfolgen außerhalb des Codes zu definieren, der sie verwendet. Es ist eine Möglichkeit, Daten und Verhalten zu trennen. Ihre erste Option besteht darin, Zeichenfolgenliterale implizit miteinander zu verbinden, indem Sie sie nebeneinander platzieren:
Oder mit Fortsetzungen am Zeilenende, was etwas fragiler ist, da dies funktioniert:
Das geht aber nicht:
Sieh den Unterschied? Nein? Das wirst du auch nicht, wenn es dein Code ist.
Der Nachteil des impliziten Joinings besteht darin, dass es nur mit String-Literalen funktioniert, nicht mit Strings, die aus Variablen stammen. Daher können die Dinge beim Refactor etwas haariger werden. Außerdem können Sie die Formatierung nur für die gesamte kombinierte Zeichenfolge interpolieren.
Alternativ können Sie explizit mit dem Verkettungsoperator (
+
) beitreten :Explizit ist besser als implizit, wie der Zen von Python sagt, aber dies erzeugt drei Zeichenfolgen anstelle einer und verbraucht doppelt so viel Speicher: Es gibt die beiden, die Sie geschrieben haben, plus eine, bei der es sich um die beiden handelt, die miteinander verbunden sind, also Sie muss wissen, wann man den Zen ignoriert. Der Vorteil ist, dass Sie die Formatierung auf jede der Teilzeichenfolgen separat in jeder Zeile oder auf das gesamte Los von außerhalb der Klammern anwenden können.
Schließlich können Sie Zeichenfolgen in dreifachen Anführungszeichen verwenden:
Dies ist oft mein Favorit, obwohl sein Verhalten etwas anders ist, da die neue Zeile und alle führenden Leerzeichen in nachfolgenden Zeilen in Ihrer letzten Zeichenfolge angezeigt werden. Sie können den Zeilenumbruch mit einem Escape-Backslash entfernen.
Dies hat das gleiche Problem wie die oben beschriebene Technik, da sich der richtige Code nur durch unsichtbare Leerzeichen vom falschen Code unterscheidet.
Welches "am besten" ist, hängt von Ihrer speziellen Situation ab, aber die Antwort ist nicht einfach ästhetisch, sondern eines von subtil unterschiedlichen Verhaltensweisen.
quelle
'
, um diese Zeichenfolge zu enthalten, oder die doppelten Anführungszeichen in Ihrer Zeichenfolge umgehen oder die dreifachen doppelten Anführungszeichen verwenden"""
. Das Problem mit Zeichenfolgen in Anführungszeichen, die Anführungszeichen enthalten, ist das gleiche, unabhängig davon, ob Sie eine einzelne Zeile oder mehrere Zeilen verwenden, um die Literalzeichenfolge zu definieren.+
.Aufeinanderfolgende Zeichenfolgenliterale werden vom Compiler zusammengefügt, und Ausdrücke in Klammern werden als einzelne Codezeile betrachtet:
quelle
Persönlich mag ich es nicht, offene Blöcke aufzuhängen, also würde ich es wie folgt formatieren:
Im Allgemeinen würde ich mich nicht zu sehr darum bemühen, dass der Code genau in eine Zeile mit 80 Spalten passt. Es lohnt sich, die Leitungslänge auf einem vernünftigen Niveau zu halten, aber das harte 80-Limit gehört der Vergangenheit an.
quelle
Sie können das Textwrap-Modul verwenden, um es in mehrere Zeilen zu unterteilen
Aus der Dokumentation :
quelle
Für alle, die auch versuchen,
.format()
eine lange Zeichenfolge aufzurufen , und einige der beliebtesten Techniken zum Umschließen von Zeichenfolgen nicht verwenden können, ohne den nachfolgenden.format(
Aufruf zu unterbrechen, können Sie diesstr.format("", 1, 2)
stattdessen tun"".format(1, 2)
. Auf diese Weise können Sie die Saite mit einer beliebigen Technik brechen. Beispielsweise:kann sein
Ansonsten besteht die einzige Möglichkeit darin, Fortsetzungen am Zeilenende zu verwenden, von denen ich persönlich kein Fan bin.
quelle