Co to jest linia E128: kontynuacja linii PEP8 dla wcięcia wizualnego?

298

Właśnie otworzyłem plik z Sublime Text (z Sublime Linter) i zauważyłem błąd formatowania PEP8, którego nigdy wcześniej nie widziałem. Oto tekst:

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

Oznacza drugi argument, linię, która się zaczyna url(...)

Właśnie miałem wyłączyć tę kontrolę w ST2, ale chciałbym wiedzieć, co robię źle, zanim to zignoruję. Nigdy nie wiadomo, jeśli wydaje się to ważne, mogę nawet zmienić swoje sposoby :)

Oli
źródło

Odpowiedzi:

475

PEP-8 zaleca ci wcięcie linii w nawiasie otwierającym, jeśli umieścisz cokolwiek w pierwszej linii, więc albo powinno być wcięcie do nawiasu otwierającego:

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

lub nie umieszczanie żadnych argumentów w linii początkowej, a następnie wcięcie do jednolitego poziomu:

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

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

Sugeruję przeczytanie PEP-8 - możesz przejrzeć wiele z nich i jest to dość łatwe do zrozumienia, w przeciwieństwie do niektórych bardziej technicznych PEP.

Gareth Latty
źródło
5
Każdy wie, dlaczego Django to robi; czy jest dobry powód? Wygląda na to, że równie łatwo byłoby śledzić PeP-8.
TheHerk
6
Jest to tak wszechobecne w kodzie Django, który widziałem (a także w całej ich dokumentacji), że prawdopodobnie zastępuje PEP-8, w końcu mówi: „ Wiele projektów ma swoje własne wytyczne dotyczące stylu kodowania. W przypadku jakichkolwiek konfliktów taki projekt -Precyzyjne przewodniki mają pierwszeństwo dla tego projektu.
Nick T
6
@Herk uzasadnieniem jest prawdopodobnie to, że pierwszy argument patterns()jest unikalny (przedrostek dla wszystkich innych określonych elementów), a wszystkie pozostałe argumenty są wzorcami adresów URL, które są w zasadzie takie same.
Nick T
6
@NickT Źle odczytujesz PEP-8 - PEP-8 zaleca przestrzeganie istniejącej konwencji, w której dany projekt go używa - ale w tym przypadku kod nie wchodzi w Django, wchodzi do twojego projektu za pomocą Django - nie ma potrzeby przestrzegać ich konwencji. Celem tej reguły jest zachowanie spójności wewnątrz baz kodu.
Gareth Latty
25
Zauważ, że PEP8 stwierdza również, że należy zignorować PEP8, jeśli ma to sens, i argumentowałbym, że w tym przypadku ma to sens. Nie zgadzaj się z własnymi projektami. W każdym razie wkrótce będzie to kwestia sporna, ponieważ używanie patterns()będzie przestarzałe w Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…
Tom Carrick
13

Dotyczy to również takich instrukcji (automatycznie sformatowanych przez PyCharm):

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

Co da takie samo ostrzeżenie o stylu. Aby się go pozbyć, musiałem przepisać go na:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])
wyświetlana nazwa
źródło
2
Bardzo wolę tutaj nawias kwadratowy niż ukośnik odwrotny, pierwszy wiersz return (, potem każdy element zwrotny na własnej linii, wcięcie, a na końcu nawias zamykający na osobnej linii, na tym samym poziomie wcięcia jak return. Edytuj: Jak ten pastebin.com/fAe7558X
Markus Meskanen
1
@MarkusMeskanen Tak, ja też. Chciałem tylko zaznaczyć, że nawet format automatyczny nie jest w pełni zgodny z tą specyfikacją.
nazwa wyświetlana