Was ist PEP8s E128: Fortsetzungslinie für visuelle Einrückung unter eingerückt?

298

Ich habe gerade eine Datei mit Sublime Text (mit Sublime Linter) geöffnet und einen PEP8-Formatierungsfehler festgestellt, den ich noch nie zuvor gesehen hatte. Hier ist der Text:

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

Es markiert das zweite Argument, die Zeile, die beginnt url(...)

Ich wollte diese Prüfung in ST2 deaktivieren, möchte aber wissen, was ich falsch mache, bevor ich sie ignoriere. Du weißt nie, ob es wichtig erscheint, ich könnte sogar meine Wege ändern :)

Oli
quelle

Antworten:

475

PEP-8 empfiehlt, dass Sie Zeilen in die öffnenden Klammern einrücken, wenn Sie etwas in die erste Zeile einfügen. Daher sollte es entweder in die öffnende Klammer eingerückt sein:

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

oder keine Argumente an die Startlinie setzen und dann auf eine einheitliche Ebene einrücken:

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

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

Ich schlage vor, PEP-8 durchzulesen - Sie können viel davon durchblättern, und es ist im Gegensatz zu einigen der technischeren PEPs ziemlich einfach zu verstehen.

Gareth Latty
quelle
5
Jeder weiß, warum Django das tut; Gibt es einen guten Grund? Es scheint genauso einfach zu sein, PeP-8 zu folgen.
TheHerk
6
Dies ist in Django-Code, den ich gesehen habe, so allgegenwärtig (und es ist überall in ihren Dokumenten zu finden), dass es PEP-8 wohl ersetzt, schließlich heißt es: " Viele Projekte haben ihre eigenen Richtlinien für den Codierungsstil. Im Falle von Konflikten, wie z -spezifische Leitfäden haben Vorrang für dieses Projekt. "
Nick T
6
@TheHerk Die Begründung ist wahrscheinlich, dass das erste Argument patterns()eindeutig ist (ein Präfix für alles andere, was angegeben wird), und alle anderen Argumente sind URL-Muster, die im Grunde gleich sind.
Nick T
6
@NickT Sie lesen PEP-8 falsch - PEP-8 empfiehlt, die bestehende Konvention zu befolgen, bei der ein bestimmtes Projekt es verwendet. In diesem Fall wird der Code jedoch nicht in Django, sondern mit Django in Ihr Projekt übernommen. Es besteht keine Notwendigkeit ihrer Konvention folgen. Ziel dieser Regel ist es, die Konsistenz innerhalb der Codebasen zu gewährleisten.
Gareth Latty
25
Beachten Sie, dass PEP8 auch angibt, dass Sie PEP8 ignorieren sollten, wenn dies sinnvoll ist, und ich würde argumentieren, dass dies in diesem Fall sinnvoll ist. Fühlen Sie sich frei, für Ihre eigenen Projekte nicht einverstanden zu sein. In jedem Fall wird dies bald ein strittiger Punkt sein, da die Verwendung patterns()in Django 1.8 veraltet sein wird: docs.djangoproject.com/de/dev/releases/1.8/…
Tom Carrick
13

Dies gilt auch für Anweisungen wie diese (von PyCharm automatisch formatiert):

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

Welches wird die gleiche Stilwarnung geben. Um es loszuwerden, musste ich es umschreiben auf:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])
Anzeigename
quelle
2
Ich bevorzuge hier Klammern gegenüber Backslash, wobei die erste Zeile return (, dann jedes Mehrwegelement in einer eigenen Zeile eingerückt und schließlich die schließende Klammer in einer separaten Zeile auf derselben Einrückungsstufe wie die return. Bearbeiten: Gefällt mir
Markus Meskanen
1
@ MarkusMeskanen Ja, ich auch. Ich wollte nur darauf hinweisen, dass nicht einmal das automatische Format dieser Spezifikation vollständig entspricht.
Anzeigename