2012-08-12 5 views
9

Immer mehr verwenden wir angekettet Funktion aufruft:Python-Stil für `chained` Funktion ruft

value = get_row_data(original_parameters).refine_data(leval=3).transfer_to_style_c() 

Es kann lang sein. Um eine lange Zeile im Code zu speichern, was wird bevorzugt?

value = get_row_data(
    original_parameters).refine_data(
    leval=3).transfer_to_style_c() 

oder:

value = get_row_data(original_parameters)\ 
     .refine_data(leval=3)\ 
     .transfer_to_style_c() 

Ich fühle es gut Backslash \ und .function neue Zeile setzen zu verwenden. Dadurch hat jeder Funktionsaufruf eine eigene Zeile, die leicht zu lesen ist. Aber das klingt von vielen nicht bevorzugt. Und wenn Code subtile Fehler macht, wenn es schwer zu debuggen ist, fange ich immer an zu befürchten, dass es ein Leerzeichen oder etwas nach dem backslash (\) sein könnte.

Um aus der Führung Python Stil zu zitieren:

Lange Schlangen Einwickeln Ausdrücke in Klammern mehrere Zeilen verteilt über durch werden können. Diese sollten bevorzugt verwendet werden, um einen Backslash für die Zeilenfortsetzung zu verwenden. Achten Sie darauf, die fortlaufende Zeile entsprechend einzurücken. Der bevorzugte Ort, um einen binären Operator zu brechen, ist nach dem Operator, nicht davor.

+0

Der Style Guide ist ein * Guide *; Ignoriere es, wenn es nicht zu deiner aktuellen Situation passt. :-) –

+0

Sie können Ihr zweites Beispiel mit automatischer Einrückung in den meisten Editoren erreichen und es vermeidet die Verwendung von '\\' - das wäre nur zufällig mein persönlicher Stil - http://pastebin.com/8Ld9sX5G –

+0

Ich ziehe es vor zu setzen der Ausdruck in Klammern und separate Methoden nach dem Punkt, einer pro Zeile ('function.' statt' .function') – joaquin

Antwort

13

Ich neige dazu, die folgenden bevorzugen, die die non-recommended\ dank einer öffnenden Klammer meidet:

value = (get_row_data(original_parameters) 
     .refine_data(level=3) 
     .transfer_to_style_c()) 

Ein Vorteil dieser Syntax ist, dass jeder Methodenaufruf in einer eigenen Zeile ist.

Eine ähnliche Art von \ -weniger Struktur ist mit Stringliterale auch oft nützlich, so dass sie über die empfohlenen 79 Zeichen pro Zeile Limit gehen nicht:

message = ("This is a very long" 
      " one-line message put on many" 
      " source lines.") 

Dies ist eine Single ist Zeichenfolge Literal, das effizient vom Python-Interpreter erstellt wird (das ist viel besser als das Summieren von Strings, das mehrere Strings im Speicher erstellt und sie mehrere Male kopiert, bis der letzte String erhalten wird).

Python-Code-Formatierung ist nett.

+0

neugierig auf den richtigen Einrückungsstil für die Fortsetzung fand ich die [style guide] (https://www.python.org/dev/peps/pep-0008/) – Shanimal

1

Was ist mit dieser Option:

value = get_row_data(original_parameters, 
      ).refine_data(leval=3, 
       ).transfer_to_style_c() 

Beachten Sie, dass Kommas redundant sind, wenn es keine anderen Parameter sind, aber ich halte sie Konsistenz zu erhalten.

+0

Dies ist eine gute Alternative. –

0

Das meine eigenen Vorlieben nicht zitieren (obwohl Kommentare zu Ihrer Frage sehen :)) oder Alternativen Antwort darauf ist:

Halten Sie sich an den Stil-Richtlinien für jedes Projekt Sie bereits - wenn nicht, dann angegeben, halten als konsistent, wie Sie mit dem Rest der Code-Basis in Stil können.

Ansonsten wählen Sie einen Stil, den Sie mögen und bleiben Sie dabei - und lassen Sie andere wissen, dass Sie verkettete Funktionsaufrufe schreiben möchten, wenn sie nicht in einer Zeile lesbar sind (oder wie auch immer Sie sie beschreiben möchten) .

Verwandte Themen