Cos'è l'E128 di PEP8: linea di continuazione sottotentata per rientro visivo?


298

Ho appena aperto un file con Sublime Text (con Sublime Linter) e ho notato un errore di formattazione PEP8 che non avevo mai visto prima. Ecco il testo:

urlpatterns = patterns('',
    url(r'^$', listing, name='investment-listing'),
)

Sta segnalando il secondo argomento, la linea che inizia url(...)

Stavo per disabilitare questo controllo in ST2 ma mi piacerebbe sapere cosa sto facendo di sbagliato prima di ignorarlo. Non sai mai, se mi sembra importante, potrei anche cambiare il mio modo :)

Risposte:


475

PEP-8 consiglia di rientrare le righe tra parentesi aperte se si inserisce qualcosa nella prima riga, quindi dovrebbe rientrare nella parentesi aperta:

urlpatterns = patterns('',
                       url(r'^$', listing, name='investment-listing'))

o non mettere alcun argomento sulla linea di partenza, quindi rientrare a un livello uniforme:

urlpatterns = patterns(
    '',
    url(r'^$', listing, name='investment-listing'),
)

urlpatterns = patterns(
    '', url(r'^$', listing, name='investment-listing'))

Suggerisco di leggere PEP-8: puoi sfogliarne molte ed è abbastanza facile da capire, a differenza di alcuni dei PEP più tecnici.


5
Qualcuno sa perché Django lo fa; c'è una buona ragione? Sembra che sarebbe altrettanto facile seguire PeP-8.
TheHerk

6
Questo è così onnipresente nel codice Django che ho visto (in più è su tutti i loro documenti) che probabilmente sostituisce PEP-8, dopo tutto dice " Molti progetti hanno le loro linee guida di stile di codifica. In caso di conflitti, tale progetto - le guide specifiche hanno la precedenza per quel progetto. "
Nick T,

6
@TheHerk la logica è probabilmente che il primo argomento patterns()è unico (un prefisso per tutto il resto specificato), e tutti gli altri argomenti sono schemi url che sono sostanzialmente gli stessi.
Nick T,

6
@NickT Stai leggendo erroneamente PEP-8 - PEP-8 consiglia di seguire la convenzione esistente in cui un determinato progetto lo utilizza - ma in questo caso il codice non va in Django, va nel tuo progetto usando Django - non è necessario seguire la loro convenzione. Lo scopo di tale regola è mantenere la coerenza all'interno delle basi di codice.
Gareth Latty,

25
Nota che PEP8 afferma anche che dovresti ignorare PEP8 dove ha senso farlo, e direi che in questo caso ha senso. Sentiti libero di non essere d'accordo con i tuoi progetti. In ogni caso questo sarà presto un punto controverso in quanto l'utilizzo patterns()sarà deprecato in Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…
Tom Carrick,

13

Questo vale anche per affermazioni come questa (formattata automaticamente da PyCharm):

    return combine_sample_generators(sample_generators['train']), \
           combine_sample_generators(sample_generators['dev']), \
           combine_sample_generators(sample_generators['test'])

Che darà lo stesso avvertimento di stile. Per liberarmene ho dovuto riscriverlo a:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])

2
Preferisco di gran lunga la parentesi alla barra rovesciata qui, essendo la prima riga return (, quindi ogni elemento restituibile sulla propria riga, rientrato, e infine la parentesi di chiusura su una riga separata, allo stesso livello di rientro di return. Modifica: in questo modo pastebin.com/fAe7558X
Markus Meskanen

1
@MarkusMeskanen Sì, anch'io. Volevo solo sottolineare che nemmeno il formato automatico è pienamente conforme a questa specifica.
displayname
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.