In dieser Qiita-Reihe wurde Python als Hauptsprache für die Datenanalyse verwendet. Kennen Sie übrigens den Python-Codierungsstandard PEP8?
Quellcode hat im Allgemeinen eine längere "Lesezeit" als "Schreibzeit" und wurde aufgrund dieser Tatsache auf der Grundlage der Idee "Schreiben wir Code, der einfach mit einem einheitlichen Stil zu lesen ist" erstellt. Ist das eine Anleitung.
Style Guide for Python Code http://legacy.python.org/dev/peps/pep-0008/
Die Hauptfamilie ist natürlich Englisch, aber Freiwillige haben es ins Japanische übersetzt.
PEP8 Japanische Übersetzung https://github.com/mumumu/pep8-ja
Auf jeden Fall denke ich, dass diejenigen, die Python verwenden, es auf jeden Fall lesen sollten.
Übrigens ist es eine Menge Arbeit, eine lange Führung in den Kopf zu schlagen und sie ohne Auslassung zu überprüfen. Als Mensch können Sie Fehler machen. Daher ist es hilfreich, ein Tool zu haben, um zu überprüfen, ob die Richtlinien eingehalten werden.
In der Welt von Python gibt es einen Befehl mit demselben Namen wie die Richtlinie pep8. Sie können dies überprüfen.
Installieren Sie es zuerst mit pip wie folgt.
Zu diesem Zeitpunkt ist es zweckmäßig, auch pyflakes einzuschließen. Was ist Pyflakes? Es ist ein Tool, das die Grammatik von Python überprüft. Dies erkennt nicht nur offensichtliche Grammatikfehler, sondern auch nutzlosen Code wie unerwünschte Importanweisungen. Lassen Sie es uns gemeinsam vorstellen.
pip install pep8
pip install pyflakes
Django Für diejenigen, die Webanwendungen mit dem Framework erstellen, [Flake8 als Alternative zu Pyflakes einführen](http://naoina.plog.la/2013/05 / 09233720000000) und Glück wird verwirklicht.
Erstellen Sie nach der Installation von pep8 und pyflakes ein Shell-Skript wie folgt und legen Sie es in einem Verzeichnis in Ihrem Pfad ab. Ich benutze dies übrigens als Befehl namens pyck.
setup_environment() {
#Geben Sie den Python-Installationspfad an
PYTHON_PATH=/opt/python/current
IGNORE_ERRORS=E221,E701,E202
}
main() {
setup_environment
which $PYTHON_PATH/bin/pyflakes > /dev/null || exit 254
which $PYTHON_PATH/bin/pep8 > /dev/null || exit 254
$PYTHON_PATH/bin/pyflakes $*
$PYTHON_PATH/bin/pep8 --ignore=$IGNORE_ERRORS --repeat $*
exit 0
}
main $*
Wenn Sie your_file.py für die zu überprüfende Datei pycken, werden die Syntaxprüfung und die Konformitätsprüfung mit der Richtlinie durchgeführt. Wenn nichts ausgegeben wird, liegt kein Fehler vor. Wenn im obigen Skript pep8 oder pyflakes selbst nicht vorhanden sind, endet es mit einem Rückgabewert von 254.
Bei einigen Projekten kann es auch problematisch sein, die Richtlinien perfekt einzuhalten. In solchen Fällen können Sie die Richtliniennummer, die Sie ignorieren möchten, mit der Option pep8 --ignore wie oben gezeigt angeben.
Weitere Informationen dazu, welche Fehlernummer welcher Syntax entspricht, finden Sie in der PEP8-Dokumentation.
Lassen Sie uns als Beispiel die Syntax überprüfen. Dieses Mal habe ich die folgenden Dateien als Beispiel vorbereitet.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
def list_files(path):
for root, dirs, files in os.walk(path):
for filename in files:
fullname = os.path.join(root, filename)
print( fullname )
def main(args):
path = args[1]
list_files(path)
if __name__ == '__main__':
if len(sys.argv) > 1:
main(sys.argv)
Diese Datei os_walk.py ist ein einfaches Programm, das die Liste der Dateien in dem im Argument angegebenen Verzeichnis auflistet und auf dem Bildschirm ausgibt.
Das Programm selbst funktioniert einwandfrei. Bei einer Syntaxprüfung wurden jedoch die folgenden Richtlinienverletzungen festgestellt.
$ pyck os_walk.py
os_walk.py:4:11: E401 multiple imports on one line
os_walk.py:6:1: E302 expected 2 blank lines, found 1
os_walk.py:10:19: E201 whitespace after '('
os_walk.py:12:1: E302 expected 2 blank lines, found 1
os_walk.py:19:1: W391 blank line at end of file
Auf diese Weise verstoßen Sie sofort gegen die Richtlinien, wenn Sie den Quellcode schreiben, ohne darüber nachzudenken.
Die pep8-Nachricht ist etwas schwer zu erkennen, bis Sie sich daran gewöhnt haben, wo sie behoben werden kann. Sie werden sich noch mehr freuen, wenn Sie py.test verwenden, um die Nachricht freundlicher anzuzeigen.
Zuerst wie gewohnt mit pip installieren.
pip install pep8 pytest pytest-pep8
Sie müssen lediglich die gewünschte Datei mit py.test --pep8 anstelle des Befehls pep8 überprüfen. Lassen Sie uns os_walk.py früher überprüfen.
Eine detailliertere Meldung wurde angezeigt als die einfache pep8. In diesem Fall ist es offensichtlich, wo im Quellcode das Problem liegt und wie es behoben werden kann.
Es gibt auch ein Tool namens PyCharm, das ich nicht verwendet habe. Sie können dies verwenden.
Jetzt, da Sie die Einhaltung der Quellcode-Richtlinien mit einem Tool überprüfen können, kann es manchmal schwierig sein, all dies manuell zu beheben. Verwenden Sie daher das automatische Korrekturwerkzeug. autopep8 ist genau dieses Tool zur automatischen Korrektur. Lassen Sie es uns sofort vorstellen.
pip install autopep8
Verwenden wir das Tool als autopep8 os_walk.py für den obigen Beispielcode. Dann wurde der modifizierte Quellcode wie unten gezeigt auf die Standardausgabe ausgespuckt.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
def list_files(path):
for root, dirs, files in os.walk(path):
for filename in files:
fullname = os.path.join(root, filename)
print(fullname)
def main(args):
path = args[1]
list_files(path)
if __name__ == '__main__':
if len(sys.argv) > 1:
main(sys.argv)
Sicher scheint das Problem gelöst zu sein. Verwenden Sie die Option -i wie autopep8 -i os_walk.py, um dies tatsächlich in eine Datei zu schreiben und wiederzugeben.
Wenn Sie den Quellcode unter dem aktuellen Verzeichnis sofort ändern möchten, können Sie alles auf einmal ändern, indem Sie die folgenden Schritte ausführen.
pep8 . | cut -d: -f 1 | sort | uniq | xargs autopep8 -i
Ebenso wie bei pep8 können Sie bei autopep8 die Fehlernummer angeben, die Sie mit der Option --ignore ignorieren möchten.
Autopep8 -i ohne nachzudenken ist jedoch eine ziemlich grobe Methode. Überprüfen Sie daher diff, überprüfen Sie die Grammatik mit Pyflakes, Nase usw. Vergessen Sie nicht, Tests durchzuführen, um die Qualität sicherzustellen.
Wenn Sie das Shell-Skript wie folgt verbessern, können Sie die Option -i angeben, um es automatisch mit autopep8 zu reparieren. Ohne diese Option können Sie es einfach überprüfen.
run_check() {
$PYTHON_PATH/bin/flake8 --ignore=$IGNORE_ERRORS $*
}
autofix() {
shift && $PYTHON_PATH/bin/autopep8 --ignore=$IGNORE_ERRORS -v -i $*
}
main() {
setup_environment
which $PYTHON_PATH/bin/autopep8 > /dev/null || exit 254
which $PYTHON_PATH/bin/flake8 > /dev/null || exit 254
test "$1" = "-i" || run_check $*
test "$1" = "-i" && autofix $*
}
main $*
In diesem Fall sollten Sie die Syntax der normalerweise verwendeten Emacs überprüfen. In diesem Fall empfehlen wir Emacs Lisp mit dem Namen python-pep8.el.
python-pep8.el https://gist.github.com/ieure/302847
Geben Sie bei der tatsächlichen Verwendung den Pfad von pep8 an. Schreiben Sie den Pfad wie folgt um:
;; /opt/python/Wenn aktuell der Python-Installationspfad ist
(defcustom python-pep8-command "/opt/python/current/bin/pep8"
"PEP8 command."
:type '(file)
:group 'python-pep8)
Jetzt müssen Sie nur noch python-pep8.el in ein Verzeichnis laden, das sich im Emacs-Ladepfad befindet. Das folgende Emacs Lisp lädt python-pep8 und weist C-c p als Schlüsselbindung für die Syntaxprüfung zu.
(when (load "python-pep8")
(define-key global-map "\C-c\ p" 'python-pep8))
Jetzt können Sie den Python-Code in Emacs und C-c p öffnen, um die Syntax mit pep8 zu überprüfen.
Sie können jetzt die Syntax nahtlos überprüfen und ändern.
Beachten Sie, dass C-c p beim Bearbeiten einer beliebigen Datei funktioniert. Verwenden Sie daher besser den Hook des Python-Modus.
(load "python-pep8")
(setq python-mode-hook
(function (lambda ()
(local-set-key "\C-c\ p" 'python-pep8))))
(setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist))
(setq interpreter-mode-alist (cons '("python" . python-mode)
interpreter-mode-alist)))
Mit Emacs können Sie außerdem ständig eine PEP8-Konformitätsprüfung durchführen und diese visualisieren, während Sie den Quellcode bearbeiten. Dies ist in einem separaten Artikel zusammengefasst. Überprüfen Sie daher, ob Sie Emacs verwenden.
PEP8 ist ein unverzichtbarer Quellcode-Styleguide für alle Python-Programmierer. Nutzen Sie die Tools vollständig und schreiben Sie Ihren Code so, dass er den Richtlinien so weit wie möglich entspricht.
Recommended Posts