Frage Wie kann ich einen Zeilenumbruch machen (Zeilenfortsetzung)?


Ich habe eine lange Codezeile, die ich unter mehreren Zeilen aufteilen möchte. Was verwende ich und wie lautet die Syntax?

Zum Beispiel, eine Menge Strings hinzufügen,

e = 'a' + 'b' + 'c' + 'd'

und habe es in zwei Zeilen wie folgt:

e = 'a' + 'b' +
    'c' + 'd'

801
2017-09-09 23:45


Ursprung


Antworten:


Was ist die Linie? Sie können einfach Argumente in der nächsten Zeile ohne Probleme haben:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

Ansonsten können Sie so etwas tun:

if a == True and \
   b == False

Überprüf den Gestaltungsrichtlinie für mehr Informationen.

Aus Ihrer Beispielzeile:

a = '1' + '2' + '3' + \
    '4' + '5'

Oder:

a = ('1' + '2' + '3' +
    '4' + '5')

Beachten Sie, dass im Styleguide angegeben wird, dass die Verwendung der impliziten Fortsetzung mit Klammern bevorzugt wird. In diesem Fall ist das Hinzufügen von Klammern um den Ausdruck jedoch wahrscheinlich der falsche Weg.


910
2017-09-09 23:52



Von Style Guide für Python Code:

Die bevorzugte Methode zum Umschließen langer Zeilen besteht darin, Pythons implizierte Zeilenfortsetzung in Klammern, Klammern und Klammern zu verwenden. Lange Zeilen können durch Umbrechen von Ausdrücken in Klammern in mehrere Zeilen unterteilt werden. Diese sollten bevorzugt verwendet werden, um einen Backslash für die Zeilenfortsetzung zu verwenden.

Backslashes können manchmal noch angebracht sein. Zum Beispiel können lange, multiple with-Anweisungen keine implizite Fortsetzung verwenden, daher sind Backslashes akzeptabel:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

Ein anderer solcher Fall ist mit Behauptungen.

Achten Sie darauf, die fortgesetzte Zeile entsprechend einzurücken. Der bevorzugte Ort, um einen binären Operator zu umgehen, ist nach der Betreiber, nicht davor. Einige Beispiele:

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

EDIT: PEP8 empfiehlt jetzt die gegensätzliche Konvention (um bei binären Operationen zu brechen), die von Mathematikern und ihren Herausgebern verwendet werden, um die Lesbarkeit zu verbessern.

Donald Knuths Art zu brechen Vor Ein binärer Operator richtet die Operatoren vertikal aus und verringert so die Arbeitsbelastung des Auges bei der Bestimmung, welche Objekte addiert und subtrahiert werden.

Von PEP8: Sollte eine Zeile vor oder nach einem binären Operator brechen?:

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].

Wenn man der Tradition aus der Mathematik folgt, erhält man normalerweise einen besser lesbaren Code:

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

In Python-Code ist es zulässig, vor oder nach einem binären Operator zu brechen, solange die Konvention lokal konsistent ist. Für neuen Code wird Knuths Stil vorgeschlagen.

[3]: Donald Knuths The TeXBook, Seiten 195 und 196


177
2017-09-10 00:06



Die Gefahr bei der Verwendung eines umgekehrten Schrägstrichs zum Beenden einer Zeile besteht darin, dass wenn der umgekehrte Schrägstrich nach dem umgekehrten Schrägstrich hinzugefügt wird (was natürlich sehr schwer zu sehen ist), der umgekehrte Schrägstrich nicht länger das tut, was Sie dachten.

Siehe Python Idioms und Anti-Idioms (für Python 2 oder Python 3) für mehr.


59
2017-09-15 06:28



Sie können Zeilen zwischen Klammern und geschweiften Klammern trennen. Darüber hinaus können Sie den umgekehrten Schrägstrich anhängen \ zu einer Linie, um es explizit zu brechen:

x = (tuples_first_value,
     second_value)
y = 1 + \
    2

20
2017-09-21 12:20



Setzen Sie a \ am Ende der Zeile oder legen Sie die Aussage in Parens bei ( .. ). Von IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

oder

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

19
2017-09-09 23:48



Aus dem Maul des Pferdes: Explizite Zeile   Beitritt

Zwei oder mehr physische Linien können sein   in logische Linien mit eingefügt   Backslash-Zeichen (\), wie folgt:   wenn eine physische Zeile in einem endet   Backslash, der nicht Teil einer Zeichenfolge ist   Literal oder Kommentar, es ist mit verbunden   das Folgende bildet eine einzige logische   Zeile, Löschen des Backslash und der   nach dem Zeilenende-Zeichen. Zum   Beispiel:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

Eine Zeile, die mit einem Backslash endet, kann nicht   einen Kommentar tragen. Ein umgekehrter Schrägstrich nicht   Setzen Sie einen Kommentar fort. Ein Backslash tut es   ein Token mit Ausnahme von String nicht fortsetzen   Literale (d. h. andere Token als   Zeichenfolgenliterale können nicht aufgeteilt werden   physische Linien mit einem Backslash). EIN   Backslash ist an anderer Stelle illegal   Zeile außerhalb eines String-Literals.


17
2017-09-09 23:53