Cum pot face o întrerupere de linie (line continuare) în Python?

Am o lungă linie de cod care vreau să mă despart între mai multe linii. Ce folosesc eu și care este sintaxa?

De exemplu, adăugarea de o mulțime de sfori,

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

și să-l în două linii astfel:

e = 'a' + 'b' +
    'c' + 'd'
Soluția

Ce este linia? Puteți avea doar argumente pe linia următoare fara probleme:

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

În caz contrar, puteți face ceva de genul asta:

if a == True and \
   b == False

Verificați ghid de stil pentru mai multe informații.

De exemplu linia:

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

Sau:

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

Rețineți că ghidul de stil spune că, folosind implicit continuarea cu paranteze este de preferat, dar în acest caz doar adăugarea de paranteze în jurul exprimare este, probabil, un mod greșit de a merge.

Comentarii (16)

La PEP 8 -- Ghid de Stil pentru Python Code:

modul preferat de ambalaj linii lungi este de a folosi Python's implicită linie continuare în interiorul paranteze rotunde, paranteze și acolade. Linii lungi pot fi separate pe mai multe linii de ambalaj expresiile din paranteze. Acestea ar trebui să fie utilizate în preferința de a utiliza un backslash pentru linie continuare.

backslash-uri pot fi în continuare necesar uneori. De exemplu, mult timp, mai multe cu-declarații nu poate folosi implicit continuare, backslash-uri sunt acceptabile:

deschis('/path/to/unele/file/ai/vrei/sa/citit'), ca file_1, \ deschis('/path/to/unele/file/fiind/scris', 'g'), ca file_2: file_2.scrie(file_1.read())

un Alt astfel de caz este cu afirme declarații.

Asigurați-vă că pentru a liniuță a continuat linia corespunzător. Locul preferat pentru a rupe în jurul valorii de un operator binar este după operatorul, nu înainte de aceasta. Câteva exemple:

clasa Dreptunghi(Blob):

def init(self, lățime, înălțime, culoare='negru', accentul=Nici unul, evidențiați=0): dacă (width == 0 și h == 0 și culoare = 'roșu' si accent == 'puternic' sau evidențiați > 100): raise ValueError("îmi pare rău, ai pierdut") dacă width == 0 și h == 0 și (culoare = 'roșu' sau accentul este Nici unul): raise ValueError("nu't cred așa-valorile sunt %s, %s" % (lățime, înălțime)) Blob.init(self, lățime, înălțime, culoare, accent, evidențiați)

PEP8 acum recomandă vizavi de convenția (pentru rupere la operații binare) folosit de matematicieni și editorii lor pentru a îmbunătăți lizibilitatea.

Donald Knuth's stil de rupere înainte un operator binar se aliniază operatorii pe verticală, reducând astfel ochiul's volumului de muncă atunci când se determină care elemente se adaugă și se scade.

De PEP8: ar Trebui să o întrerupere de linie înainte sau după un operator binar?:

Donald Knuth explică regula tradițională în Calculatoare și Culegere de serie: "Deși formule într-un paragraf rupe întotdeauna după operații binare și relații, afișate formulele rupe întotdeauna înainte de operații binare"[3].

După tradiția de la matematică, de obicei, rezultate în mai lizibil codul:

Da: ușor pentru a se potrivi operatorii cu operanzi

venituri = (gross_wages

  • taxable_interest
  • (dividende - qualified_dividends)
  • ira_deduction
  • student_loan_interest)

În cod Python, este permisă de a rupe înainte sau după un operator binar, atâta timp cât convenția este în concordanță la nivel local. Pentru noul cod Knuth's stil este sugerat.

[3]: Donald Knuth's TeXBook, paginile 195 și 196

Comentarii (5)

Pericolul în utilizarea unui backslash pentru a termina o linie este că, dacă un spațiu este adăugat după backslash (care, desigur, este foarte greu să vezi), backslash-ul nu mai face ceea ce ai crezut că a fost.

Vezi Python Expresii și Anti-Expresii (pentru Python 2 sau Python 3) pentru mai multe.

Comentarii (1)

Puteți linii de pauză între parenthesises și bretele. În plus, puteți adăuga caracterul backslash \ la o linie pentru a rupe în mod explicit că:

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

Pus \ la sfarsit de linie sau anexați declarația în paranteze ( .. ). De IBM:

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

sau

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

De pe cal's mouth: Explicit linie aderarea

Două sau mai multe linii fizice pot fi s-a alăturat în logică, folosind linii caractere backslash (\), după cum urmează: atunci când o linie fizică se termină într-o backslash care nu este parte a unui șir literal sau comentariu, este unit cu următoarele formând o singură logică linie, ștergerea backslash și următoarele capăt-de-linie de caractere. Pentru de exemplu:

dacă 1900 < an < 2100 și 1 <= luni <= 12 \ și 1 <= zi <= 31 și 0 <= ore < 24 \ și 0 <= minute < 60 și 0 <= a doua < 60: # se Pare că o dată validă return 1

O linie se termină într-o bară oblică inversă nu poate transporta un comentariu. Un backslash nu continua un comentariu. Un backslash nu nu continua un semn cu excepția string literali (de exemplu, token-uri, altele decât literali șir nu poate fi împărțit peste linii fizice folosind un backslash). O backslash este ilegal în altă parte pe un linie în afara unui șir literal.

Comentarii (1)

Acesta nu poate fi Pythonic fel, dar in general, eu folosesc o listă cu join funcție pentru a scrie un șir lung, cum ar fi interogări SQL:

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

Luate din Autostopist's Ghid pentru Python (Linie Continuare):

Când o logică linie de cod este mai mare decât limita acceptată, aveți nevoie pentru a împărți pe mai multe linii fizice. Interpretorul Python va alătura linii consecutive dacă ultimul caracter de pe linie este un backslash. Acest lucru este util în unele cazuri, dar de obicei, ar trebui să fie evitate din cauza fragilității sale: un spațiu alb adăugat la capăt de linie, după backslash, va sparge codul și poate avea rezultate neașteptate.

O soluție mai bună este de a folosi paranteze în jurul elemente. A plecat cu un nefinalizate paranteză la capăt-de-linie interpretorul Python va adera la următoarea linie până în paranteze sunt închise. Același comportament este valabil și pentru ondulat și paranteze pătrate.

cu toate Acestea, mai des decât nu, avea să împartă un lung de linie logică este un semn că vă sunt încercarea de a face prea multe lucruri în același timp, care ar putea împiedica lizibilitate.

Având asta a spus, aici's un exemplu în vedere mai multe importuri (când depășește linie limite, definite pe PEP-8), de asemenea, aplicate siruri de caractere, în general:

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
Comentarii (0)