Gegeben:
e = 'a' + 'b' + 'c' + 'd'
Wie schreibe ich das obige in zwei Zeilen?
e = 'a' + 'b' +
'c' + 'd'
Gegeben:
e = 'a' + 'b' + 'c' + 'd'
Wie schreibe ich das obige in zwei Zeilen?
e = 'a' + 'b' +
'c' + 'd'
Was ist die Grenze? Sie können ohne Probleme Argumente in der nächsten Zeile angeben:
a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5,
blahblah6, blahblah7)
Ansonsten können Sie so vorgehen:
if (a == True and
b == False):
oder mit ausdrücklichem Zeilenumbruch:
if a == True and \
b == False:
Prüfen Sie die Styleguide für weitere Informationen.
Wenn Sie Klammern verwenden, kann Ihr Beispiel über mehrere Zeilen geschrieben werden:
a = ('1' + '2' + '3' +
'4' + '5')
Der gleiche Effekt kann mit einem expliziten Zeilenumbruch erzielt werden:
a = '1' + '2' + '3' + \
'4' + '5'
Beachten Sie, dass der Styleguide besagt, dass die implizite Fortsetzung mit Klammern zu bevorzugen ist, aber in diesem speziellen Fall ist das Hinzufügen von Klammern um Ihren Ausdruck wahrscheinlich der falsche Weg.
Eigentlich haben Sie die Präferenz des Styleguides genau falsch herum. Eine implizite Fortsetzung wird bevorzugt, ein expliziter Backslash soll nur verwendet werden, wenn es nötig ist.
Ich glaube, er will damit sagen, dass Sie, wenn Sie bereits Klammern um einen Ausdruck haben, diese verwenden sollten, aber keine Klammern um einen Ausdruck setzen sollten, nur um ihn über mehrere Zeilen zu verteilen. Das ist aber keine feste Regel. Ich denke, für die Zeile in der Frage ist ein Backslash der richtige Weg.
Das ist nicht richtig. Bitte ändern Sie Ihre Antwort so ab, dass sie das wiedergibt, was der Style Guide tatsächlich sagt, anstatt das Gegenteil zu behaupten.
Desde PEP 8 -- Style Guide für Python-Code :
Die bevorzugte Art, lange Zeilen umzubrechen, ist die Verwendung von Pythons impliziter Zeilenfortsetzung innerhalb von Klammern, eckigen Klammern und geschweiften Klammern. Lange Zeilen können auf mehrere Zeilen aufgeteilt werden, indem Ausdrücke in Klammern gesetzt werden. Diese sollten der Verwendung eines Backslashs für die Zeilenfortsetzung vorgezogen werden.
Backslashes können gelegentlich noch angebracht sein. Zum Beispiel können lange, mehrfache with-Anweisungen keine implizite Fortsetzung verwenden, so dass Backslashes akzeptabel sind:
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 sind assert-Anweisungen.
Achten Sie darauf, die fortgesetzte Zeile entsprechend einzurücken. Die bevorzugte Stelle für einen Zeilenumbruch um einen binären Operator ist nach dem Betreiber, nicht vor ihm. 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)file_2.write(file_1.read())
PEP8 empfiehlt nun die entgegengesetzte Konvention (zur Unterbrechung von Binäroperationen), die von Mathematikern und ihren Verlagen zur Verbesserung der Lesbarkeit verwendet werden.
Donald Knuths Stil des Brechens avant Ein binärer Operator richtet die Operatoren vertikal aus und entlastet so das Auge, wenn es feststellt, welche Elemente addiert und subtrahiert werden.
Desde PEP8: Soll ein Zeilenumbruch vor oder nach einem binären Operator erfolgen? :
Donald Knuth erklärt die traditionelle Regel in seiner Reihe Computer und Schriftsatz: "Obwohl Formeln innerhalb eines Absatzes immer nach binären Operationen und Beziehungen umbrechen, brechen angezeigte Formeln immer vor binären Operationen um"[3].
Wenn man der Tradition der Mathematik folgt, wird der Code in der Regel besser lesbar:
# 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 empfohlen.
[3]: Donald Knuths The TeXBook, Seiten 195 und 196
NB: Die Empfehlung wurde 2010 geändert: "Lange Zeilen können umbrochen werden ... indem Ausdrücke in Klammern gesetzt werden. Diese sollten der Verwendung eines Backslashs vorgezogen werden...", und alle Backslashs wurden aus dem Codebeispiel entfernt.
@e100: Lesen Sie den fettgedruckten Text oben: The preferred way .. is by using Python's implied line continuation inside parentheses
ist es dasselbe wie by wrapping expressions in parentheses
. Ich habe das Beispiel aktualisiert
Die Gefahr bei der Verwendung eines Backslashs am Ende einer Zeile besteht darin, dass der Backslash nicht mehr das tut, wofür er gedacht war, wenn nach dem Backslash ein Leerzeichen eingefügt wird (was natürlich sehr schwer zu sehen ist).
Siehe Python-Idiome und Anti-Idiome (für Python 2 o Python 3 ) für mehr.
Dies ist ein Grund dafür, dass es schön ist, Leerzeichen am Ende besser zu sehen; z. B. etwas wie set list listchars=trail:·
in vim. :)
Das gilt nicht nur für das Leerzeichen nach dem Backslash. Der Backslash sollte unbedingt das letzte Zeichen in der Zeile sein. Insbesondere können Sie bestimmte Begriffe in einer Summe nicht kommentieren, indem Sie die Zeile mit einem Backslash unterbrechen und einen Kommentar dahinter setzen. Klammern funktionieren gut! :)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.