Empfehlungen für implizites versus explizites Linienfügen

9

Ich würde gerne Empfehlungen zu impliziten Linienverbindungen im Vergleich zu expliziten Linienverbindungen in Python erhalten.

Bevorzugen Sie insbesondere eine Form gegenüber der anderen? Was empfehlen Sie als allgemeine Standardeinstellung? Welche Kriterien haben Sie, um eines über das andere zu wählen, und wenn Sie eines bevorzugen, wann machen Sie Ausnahmen für das andere?

Ich habe eine Antwort auf diese Frage im Sinn, die meine eigenen Vorurteile widerspiegelt, aber bevor ich meine eigene Antwort poste, möchte ich wissen, was andere denken ... und ob Sie bessere Kriterien haben können als ich vorhabe, dann werde ich deine Antwort auf jeden Fall über meine eigene annehmen.

Einige der Empfehlungen können in anderen Programmiersprachen auf diese Auswahl verallgemeinert werden, aber meine eigene Tendenz ist in Python aufgrund einiger sprachspezifischer Funktionen etwas stärker, sodass ich sowohl die allgemeinen als auch die Python-zentrierten Überlegungen kennen möchte habe zu diesem Thema.

Für einige Hintergrundinformationen fand die Diskussion um eine bestimmte Frage zum Stapelüberlauf statt , aber ich hielt es für angemessener, die Diskussion als Frage hierher zu verschieben, um zu vermeiden, dass die Antwort auf SO mit dieser Tangente überladen wird , da sie vom Thema abweicht die ursprüngliche Frage. Sie können sich diese Frage und ihre Antworten für die Beispielcode-Schnipsel ansehen, die die Diskussion in Gang gebracht haben.

Hier ist ein vereinfachtes Beispiel:

join_type = "explicit"
a = "%s line joining" \
    % (join_type)
# versus
join_type = "implicit"
b = ("%s line joining"
     % (join_type))
aculich
quelle
Best-Practice-Fragen sind für die Codeüberprüfung nicht zum Thema. Ich habe Ihre Frage an einen besseren Ort migriert.
Winston Ewert
1
@WinstonEwert Vor dem Posten habe ich mir die CodeReview-FAQ und die Programmierer-FAQ genau angesehen und mich für CodeReview entschieden, da ausdrücklich angegeben wird, dass die dort zu stellenden Fragen "Best Practices und Verwendung von Entwurfsmustern in Ihrem Code" umfassen. Ich habe eine vereinfachte Version des fraglichen Codes eingefügt. Wie ist das also nicht zum Thema?
Aculich
@WinstonEwert Ich habe in Meta eine Frage zur Klärung der CodeReview-FAQ gestellt, wenn Sie dies dort kommentieren möchten .
Aculich

Antworten:

8

Es gibt ein Dokument im Codierungsstil namens PEP8. Es wird davon abgeraten, \<NL>Klammern zu verwenden.

Die bevorzugte Methode zum Umschließen langer Zeilen ist die Verwendung der impliziten Zeilenfortsetzung von Python in Klammern, Klammern und Klammern. Lange Zeilen können über mehrere Zeilen unterbrochen werden, indem Ausdrücke in Klammern eingeschlossen werden. Diese sollten bevorzugt verwendet werden, anstatt einen Backslash für die Zeilenfortsetzung zu verwenden. Stellen Sie sicher, dass die fortgesetzte Zeile entsprechend eingerückt ist. Der bevorzugte Ort, um einen binären Operator zu umgehen, ist nach dem Operator, nicht davor.

Volltext: http://www.python.org/dev/peps/pep-0008/ (Abschnitt Codelayout)

Es ist nicht obligatorisch, definiert jedoch akzeptable bewährte Methoden, die besonders nützlich sind, wenn Sie mehrere Python-Committer in Ihrem Team haben.

Mischa Arefiev
quelle
1

Ich tendiere dazu, implizite Linienverknüpfungen zu verwenden, weil ich sie besser lesbar finde und die Unterstützung durch die Redakteure in Bezug auf das Einrücken und Hervorheben des gesamten Ausdrucks dank der Übereinstimmung in Klammern normalerweise besser ist.

jcollado
quelle
0

Derzeit würde ich es vorziehen

join_type = "kiding"
a = "%s line joining" % (join_type)

B-))

.

Ich bevorzuge das Verbinden expliziter Linien, weil ich die Unordnung der Parens am Ende der Ausdrücke nicht mag.
Aber ich mag das implizite Verbinden von Linien, um die Breite zu verringern, die beim Schreiben eines Strings benötigt wird.
In einigen Fällen ist es mir dann peinlich, die beiden Möglichkeiten nicht zu vermischen

eyquem
quelle
1
Abgesehen von allen Scherzen mag ich es nicht, explizit beizutreten, weil es mehr Eingabe erfordert und es schwierig ist, alle Backslashes beim Bearbeiten des Codes ordentlich in einer Linie zu halten.
Martineau
anscheinend hat @eyquem noch nie ein LISP geschrieben ...
Cowbert