2017-11-12 3 views
2

Wenn ich einen langen Ausdruck mit einem Operator:Bruchlinie beim Operator mit PEP8?

if (this_is_a_really_long_expression > this_is_a_really_really_long_expression): 

wie kann ich ihm die Linie brechen, so dass es zu PEP8 haftet?

wenn ich es nach dem Operator brechen:

if (this_is_a_really_long_expression > 
    this_is_a_really_really_long_expression): 

Atom (mein Editor) verursacht einen Syntaxfehler aus irgendeinem Grund ...

+0

Atom ist der Editor, den ich verwende –

+3

Nun, Atom falsch darüber, dass es sich um einen Syntaxfehler handelt. Die Art, wie Sie es brechen, ist akzeptabel nach PEP8, aber es schlägt vor, dass es besser wäre (wie in besser lesbar) zu brechen nur _before_ der Operator, so ist es das erste Ding auf der folgenden Zeile - wie @Tatsuya Yokota die Antwort ohne Backslash . – martineau

+0

Ist es wirklich ein Syntaxfehler, oder ist es nur * suggerieren * Sie sollten die Linie dort nicht brechen? – chepner

Antwort

1

PEP8 jetzt (seit 2016.06.08) recommends breaking before the binary operator:

Seit Jahrzehnten war der empfohlene Stil, nach binären Operatoren zu brechen. Dies kann jedoch die Lesbarkeit auf zwei Arten beeinträchtigen: Die Operatoren neigen dazu, über verschiedene Spalten auf dem Bildschirm verstreut zu sein, und jeder Operator wird von seinem Operanden weg und auf die vorherige Zeile bewegt. Hier hat das Auge zusätzliche Arbeit zu tun, um zu sagen, welche Elemente hinzugefügt und die subtrahiert werden:

# No: operators sit far away from their operands 
income = (gross_wages + 
      taxable_interest + 
      (dividends - qualified_dividends) - 
      ira_deduction - 
      student_loan_interest) 

Um dieses zu lösen Lesbarkeit Problem, Mathematiker und ihre Verleger der entgegengesetzte Konvention folgen. Donald Knuth erklärt die traditionelle Regel in seiner Computer- und Satz-Reihe: "Obwohl Formeln innerhalb eines Absatzes immer nach binären Operationen und Relationen brechen, brechen angezeigte Formeln immer vor binären Operationen ab" [3].

In der Tradition der Mathematik führt in der Regel in lesbarem Code:

# Yes: easy to match operators with operands 
income = (gross_wages 
     + taxable_interest 
     + (dividends - qualified_dividends) 
     - ira_deduction 
     - student_loan_interest) 

Insbesondere in diesem Fall wären die Alternativen:

# No: last two lines have the same indentation 
if (this_is_a_really_long_expression > 
    this_is_a_really_really_long_expression): 
    something_with_same_indentation() 

# No: slightly better, but still last two lines have same indent 
if (this_is_a_really_long_expression 
    > this_is_a_really_really_long_expression): 
    something_with_same_indentation() 

# Yes (historically): easy to see it's not the next block 
if (this_is_a_really_long_expression > 
     this_is_a_really_really_long_expression): 
    something_else() 

# Yes: easy to see it's not the next block and what binary operator it is 
if (this_is_a_really_long_expression 
     > this_is_a_really_really_long_expression): 
    something_else() 

persönlich ziehe ich stark Letzteres ist jedoch erwähnenswert, dass im Moment yapf immer noch die dritte ausgibt (obwohl ich denke it's a bug/noch nicht implementiert)!

Linters (einschließlich Atom!) Warnen auf den ersten beiden mit E129 visually indented line with same indent as next logical line.


Atom (mein Editor) verursacht einen Syntaxfehler aus irgendeinem Grund ...

ich getestet Atom (es funktionierte), es ist kein Syntax, aber es kann etwas gebrochen sein in deine Einrichtung.