Frage

Ich habe eine lange Codezeile, die ich will, zu brechen, sich in mehrere Linien.Was kann ich verwenden und was ist die syntax?

Für Beispiel, hinzufügen einer Reihe von Zeichenfolgen,

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

und die haben es in zwei Zeilen wie diese:

e = 'a' + 'b' +
    'c' + 'd'
War es hilfreich?

Lösung

Was ist die Linie?Sie müssen nur auf die Argumente der nächsten Zeile ohne Probleme:

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

Sonst können Sie so etwas wie dies tun:

if a == True and \
   b == False

Überprüfen Sie die style guide weitere Informationen.

Von Ihrem Beispiel-Zeile:

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

Oder:

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

Beachten Sie, dass die style-guide sagt, dass die Verwendung der impliziten Fortsetzung mit Klammern wird bevorzugt, ist aber in diesem speziellen Fall nur das hinzufügen von Klammern um Ihre expression ist wahrscheinlich der falsche Weg zu gehen.

Andere Tipps

Von Style Guide für Python-Code:

Die bevorzugte Art der Verpackung, lange Linien durch die Verwendung von Pythons implizierte zeilenfortsetzung in Klammern, Klammern und Klammern. Lange Zeilen können gebrochen werden, die über mehrere Zeilen, indem er Ausdrücke in Runden Klammern.Diese sollten bevorzugt werden, um mit einem umgekehrten Schrägstrich für Zeile fortgesetzt.

Backslashes können immer noch werden zu den entsprechenden Zeiten.Für Beispiel, lange, mehrere mit-Anweisungen nicht verwenden implizite Fortsetzung, so backslashes sind 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 weiterer solcher Fall ist mit assert-Anweisungen.

Stellen Sie sicher, dass der Einzug der fortgesetzten Zeile entsprechend.Der am günstigsten gelegene Ort zu brechen, um einen binären operator nach der Betreiber, nicht vor.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 nun empfiehlt die gegenüber convention (für den Einbruch bei binären Operationen), die von Mathematikern und Ihren Verlegern um die Lesbarkeit zu verbessern.

Donald Knuths Stil zu brechen bevor ein binärer operator richtet Operatoren vertikal, wodurch das Auge die Arbeit bei der Bestimmung, welche Elemente Hinzugefügt und subtrahiert.

Von PEP8:Sollte ein Zeilenumbruch vor oder nach einem binären operator?:

Donald Knuth erklärt die traditionelle Herrschaft in seinem Computer und Satz Serie:"Obwohl Formeln innerhalb einer Absatzes brechen immer nach binären Operationen und Beziehungen angezeigt, die Formeln immer wieder brechen, bevor die binären Operationen"[3].

Nach der tradition aus der Mathematik führt in der Regel zu besser lesbarem 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, die Pause vor oder nach einem binären operator, solange die Konvention ist konsequent lokal.Für neuen code, der Knuths Stil vorgeschlagen.

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

Die Gefahr, mit einem umgekehrten Schrägstrich am Ende einer Zeile ist, dass, wenn Leerzeichen wird Hinzugefügt, nach dem umgekehrten Schrägstrich ein (die, natürlich, ist sehr schwer zu sehen), der umgekehrte Schrägstrich ist nicht mehr das tun, was Sie dachten, es war.

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

Setzen Sie einen \ am Ende der Leitung oder schließen Sie die Anweisung in Klammern ( .. ).Von IBM:

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

oder

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

Brechen Sie Linien zwischen parenthesises und Hosenträger.Darüber hinaus können Sie hängen Sie den umgekehrten Schrägstrich \ um eine Zeile explizit zu brechen:

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

Aus dem Maul des Pferdes: Explizite line Beitritt

Zwei oder mehrere physische Zeilen kann trat in logische Linien mit backslash-Zeichen (\), wie folgt:wenn eine physische Leitung endet in einem backslash, das nicht Teil einer Zeichenkette wörtliche oder Kommentar, es ist verbunden mit die folgenden bilden eine einzige logische Zeile löschen, wird der backslash und der nach end-of-line-Zeichen.Für 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 Linie endet in einem umgekehrten Schrägstrich nicht tragen Sie einen Kommentar ein.Ein umgekehrter Schrägstrich funktioniert nicht weiterhin ist ein Kommentar.Ein umgekehrter Schrägstrich funktioniert nicht fortsetzen ein token-Ausnahme-string Literale (D. H., Token anderen als string-Literale können nicht aufgeteilt werden über physische Zeilen mit einem umgekehrten Schrägstrich).Ein umgekehrter Schrägstrich ist illegal anderswo auf ein Schlange vor einem string-literal.

Vielleicht nicht die pythonic Weg, aber ich in der Regel verwenden Liste mit join-Funktion für das schreiben eine lange Zeichenfolge wie SQL-Abfragen.

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

Entnommen aus The Hitchhiker ' s Guide to Python - (Zeilenfortsetzung):

Wenn eine logische code-Zeile länger ist als die akzeptierte Grenze, die Sie brauchen, um es zu teilen, die sich über mehrere physische Zeilen.Der Python-interpreter beitreten aufeinander folgenden Zeilen, wenn das Letzte Zeichen in der Zeile ist ein umgekehrter Schrägstrich.Dies ist in einigen Fällen nützlich, aber sollte in der Regel vermieden werden, weil von seiner zerbrechlichkeit:ein Leerzeichen an das Ende der Zeile, nach dem umgekehrten Schrägstrich, brechen Sie den code, und kann zu unerwarteten Ergebnissen führen.

Eine bessere Lösung ist die Verwendung von Klammern, um Ihre Elemente. Eine nicht geschlossene Klammer auf end-of-line der Python-interpreter wird zusammen mit der nächsten Zeile, bis die Klammern geschlossen sind.Das gleiche Verhalten gilt für geschweifte und eckige Klammern.

Jedoch, mehr als oft nicht, dass split eine lange logische Linie ist ein Zeichen, dass Sie versuchen, zu viele Dinge zur gleichen Zeit, die möglicherweise die Lesbarkeit behindern.

Mit dieser sagte, hier ist ein Beispiel über mehrere Importe (bei überschreitung Linie Grenzen, definiert auf PEP-8):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top