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 :)

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.


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'])

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.