Da PEP8 vorschlägt, die 80-Spalten-Regel für Ihr Python-Programm zu unterschreiten, wie kann ich mich mit langen Zeichenfolgen daran halten, d. H.
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
Wie würde ich vorgehen, um dies auf die folgende Zeile zu erweitern, dh
s = "this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
Da benachbarte Zeichenfolgenkonstanten automatisch verkettet werden, können Sie sie auch folgendermaßen codieren:
Beachten Sie kein Pluszeichen, und ich habe das zusätzliche Komma und Leerzeichen hinzugefügt, die der Formatierung Ihres Beispiels folgen.
Persönlich mag ich die Backslashes nicht, und ich erinnere mich, dass ich irgendwo gelesen habe, dass ihre Verwendung zugunsten dieser expliziteren Form tatsächlich veraltet ist. Denken Sie daran: "Explizit ist besser als implizit."
Ich halte den Backslash für weniger klar und weniger nützlich, da dies tatsächlich dem Newline-Zeichen entgeht. Es ist nicht möglich, einen Zeilenende-Kommentar danach zu setzen, falls dies erforderlich sein sollte. Dies ist mit verketteten Zeichenfolgenkonstanten möglich:
Ich habe eine Google-Suche nach "Python-Zeilenlänge" verwendet, die den PEP8-Link als erstes Ergebnis zurückgibt, aber auch Links zu einem anderen guten StackOverflow-Beitrag zu diesem Thema: " Warum sollte Python PEP-8 eine maximale Zeilenlänge von 79 Zeichen angeben? "
Ein weiterer guter Suchbegriff wäre "Python Line Continuation".
quelle
"str1" + "str2"
eher als"str1" "str2"
('this is my really, really, really, really, really long {} ' 'that I'd really, really, really, like to {}').format(var1, var2))
Ich denke, das wichtigste Wort in Ihrer Frage war "schlägt vor".
Codierungsstandards sind lustige Dinge. Oft haben die von ihnen bereitgestellten Anleitungen eine wirklich gute Grundlage, als sie geschrieben wurden (z. B. können die meisten Terminals nicht mehr als 80 Zeichen in einer Zeile anzeigen), aber im Laufe der Zeit werden sie funktional veraltet, werden aber immer noch strikt eingehalten. Ich denke, was Sie hier tun müssen, ist, die relativen Vorzüge des "Brechens" dieses bestimmten Vorschlags gegen die Lesbarkeit und Wartbarkeit Ihres Codes abzuwägen.
Entschuldigung, dies beantwortet Ihre Frage nicht direkt.
quelle
Sie haben ein Leerzeichen verloren und benötigen wahrscheinlich ein Zeilenfortsetzungszeichen, d. H. a
\
.oder auch:
Parens würde auch anstelle der Zeilenfortsetzung funktionieren, aber Sie riskieren jemanden, der denkt, Sie wollten ein Tupel haben und haben gerade ein Komma vergessen. Nimm zum Beispiel:
gegen:
Bei der dynamischen Typisierung von Python kann der Code in beide Richtungen ausgeführt werden, führt jedoch zu falschen Ergebnissen mit dem von Ihnen nicht beabsichtigten.
quelle
Backslash:
oder in Parens einwickeln:
quelle
Dies sind alles gute Antworten, aber ich konnte kein Editor-Plugin finden, das mir beim Bearbeiten von "implizit verketteten" Zeichenfolgen helfen würde. Deshalb habe ich ein Paket geschrieben, um es mir leichter zu machen.
Auf pip (Absätze installieren), wenn jemand, der diesen alten Thread durchwandert, ihn überprüfen möchte. Formatiert mehrzeilige Zeichenfolgen wie HTML (komprimiert Leerzeichen, zwei neue Zeilen für einen neuen Absatz, keine Sorge um Leerzeichen zwischen Zeilen).
wird ...
Alles passt leicht zu (Vim) 'gq'
quelle
Mit a können
\
Sie Anweisungen auf mehrere Zeilen erweitern:sollte arbeiten.
quelle
Ich neige dazu, einige Methoden zu verwenden, die hier nicht erwähnt werden, um große Zeichenfolgen anzugeben, aber diese sind für sehr spezifische Szenarien. YMMV ...
Mehrzeilige Textblobs, oft mit formatierten Token (nicht ganz das, was Sie gefragt haben, aber dennoch nützlich):
Erweitern Sie die Variable Stück für Stück durch eine beliebige String-Interpolationsmethode, die Sie bevorzugen:
Lesen Sie es aus einer Datei. PEP-8 begrenzt die Länge der Zeichenfolgen in einer Datei nicht. nur die Zeilen Ihres Codes. :) :)
Verwenden Sie Brute-Force oder Ihren Editor, um die Zeichenfolge mithilfe von Zeilenumbrüchen in verwaltbare Zeilen aufzuteilen, und entfernen Sie dann alle Zeilenumbrüche. (Ähnlich wie bei der ersten Technik, die ich aufgelistet habe):
quelle
Verfügbare Optionen:
"foo" \ "bar"
"foo" + \ "bar"
("foo" "bar")
("foo" + "bar")
Vermeiden
Vermeiden Sie Klammern mit Komma:
("foo", "bar")
Dies definiert ein Tupel.quelle
Wenn Sie ein langes String-Literal einfügen müssen und flake8 herunterfahren soll, können Sie die Anweisungen zum Herunterfahren verwenden . Zum Beispiel habe ich in einer Testroutine eine gefälschte CSV-Eingabe definiert. Ich fand, dass das Aufteilen auf mehr Zeilen mit Zeilen sehr verwirrend wäre, und entschied mich daher,
# noqa: E501
Folgendes wie folgt hinzuzufügen :quelle
Ich habe in der Vergangenheit textwrap.dedent verwendet. Es ist etwas umständlich, deshalb bevorzuge ich jetzt Zeilenfortsetzungen, aber wenn Sie wirklich den Blockeinzug wollen, finde ich das großartig.
Beispielcode (wobei der Zuschnitt darin besteht, das erste '\ n' mit einem Slice zu entfernen):
Erläuterung:
dedent berechnet den Einzug basierend auf dem Leerraum in der ersten Textzeile vor einer neuen Zeile. Wenn Sie es optimieren möchten, können Sie es mithilfe des
re
Moduls problemlos erneut implementieren .Diese Methode hat Einschränkungen, da sehr lange Zeilen möglicherweise noch länger sind als gewünscht. In diesem Fall sind andere Methoden, die Zeichenfolgen verketten, besser geeignet.
quelle
x[1:]
, können Sie nachher einen Backslash setzenx = """
, um den ersten Zeilenumbruch zu vermeiden.