2016-08-19 1 views
14

Definition von "Dunder" (D ouble unter score): http://www.urbandictionary.com/define.php?term=DunderCoding Stil (PEP8) - Modulebene "dunders"


Ich habe eine Frage nach der Platzierung der Modulebene "dunders" (wie __all__, __version__, __author__ etc.) in Python-Code.

Die Frage kam mir beim Lesen durch PEP8 und sehen this Stack Overflow Frage.

Die akzeptierte Antwort sagt:

__author__ eine globale „Variable“ ist und daher unter den Importen erscheinen soll.

Aber im PEP8 Abschnitt Module level dunder names las ich folgendes:

Modulebene "dunders" (dh Namen mit zwei führenden und zwei Unterstrichen Hinter) wie __all__, __author__, __version__ usw. sollte nach dem Modul Docstring aber vor jedem Import Anweisungen außer __future__ importiert werden. Python schreibt vor, dass zukünftige Importe in dem Modul vor anderem Code außer Docstrings angezeigt werden müssen.

Die Autoren auch einen Code Beispiel:

"""This is the example module. 

This module does stuff. 
""" 

from __future__ import barry_as_FLUFL 

__all__ = ['a', 'b', 'c'] 
__version__ = '0.1' 
__author__ = 'Cardinal Biggles' 

import os 
import sys 

Aber wenn ich die oben in PyCharm setzen, sehe ich diese Warnung (auch den Screenshot sehen):

PEP8: Modul Ebene Import nicht an der Spitze der Datei

PyCharm ignoring PEP8?

Frage: Was ist der richtige Weg/Ort, um diese Variablen mit doppelten Unterstrichen zu speichern?

+2

PEP 8 ist ein lebendiges Dokument. Berücksichtigen Sie, dass es zu dem Thema zuvor * still * gewesen sein könnte. –

+0

@MartijnPieters - Gibt es eine Chance zu sehen, wann ein Abschnitt hinzugefügt/geändert wurde? – linusg

Antwort

16

PEP 8 wurde kürzlich aktualisiert, um den Speicherort vor den Importen zu setzen. Siehe revision cf8e888b9555, freigegeben am 7. Juni 2016:

Relax Ort.

Legen Sie alle Modullevel-Dunde am gleichen Ort zusammen und entfernen Sie die redundante Version der Buchhaltungsinformationen.

Schließt # 27187. Patch von Ian Lee.

Der Text war further updated the next day, um die from __future__ import ... Vorbehaltssache zu adressieren.

Der Patch verweist auf issue #27187, die wiederum this pycodestyle issue verweist, wo es entdeckt wurde, PEP 8 war unklar.

Vor dieser Änderung, da es keine klare Leitlinie für Dunder Globals auf Modulebene gab, waren PyCharm und die andere Antwort korrekt zur Zeit. Ich bin mir nicht sicher, wie PyCharm ihre PEP 8-Prüfungen durchführt. Wenn sie den pycodestyle project (defacto Python Style Checker) verwenden, bin ich mir sicher, dass das automatisch behoben wird. Ansonsten, vielleicht einen Fehler mit ihnen, um dies behoben zu sehen.

+0

Wow, so schnell und klar. Wird diese Antwort in neun (warum so lange?) Minuten annehmen :) Wird jemand diese Änderung bemerken und das Verhalten des PEP8-Checkers in der nächsten Zeit aktualisieren? – linusg

+0

@linusg: Das Problem wurde vom Pyododel-Projekt ausgelöst, also bin ich sicher, dass es aktualisiert wird. Einen Fehler mit PyCharm einreichen, wenn Sie es dort reparieren möchten. –

+0

Ich werde in den nächsten Tagen noch mehr recherchieren, um herauszufinden, wie PEP8-Prüfungen in PyCharm durchgeführt werden, und eventuell einen Fehler melden. Ich werde meine Frage dann bearbeiten. – linusg