Beachten Sie den Python-Codierungsstandard PEP8

In dieser Qiita-Reihe wurde Python als Hauptsprache für die Datenanalyse verwendet. Kennen Sie übrigens den Python-Codierungsstandard PEP8?

Quellcode-Styleguide 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.

Überprüfen Sie automatisch den Quellcode

Ü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.

Verwenden Sie das PEP8 Check Tool

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.

Führen Sie gemeinsam Python-Grammatikprüfungen durch

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.

Überprüfen Sie tatsächlich den Quellcode

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.

Verwenden Sie ausgefeiltere Prüfwerkzeuge

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.

2.png

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.

Ändern Sie den Quellcode automatisch

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 $*

Überprüfen Sie vom Editor

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.

3.png

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.

Zusammenfassung

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

Beachten Sie den Python-Codierungsstandard PEP8
Erstellen einer Umgebung zur Einhaltung des Python-Codierungsstandards (PEP8) mit Eclipse + PyDev
Fassen wir den Python-Codierungsstandard PEP8 (1) zusammen.
Fassen wir den Python-Codierungsstandard PEP8 (2) zusammen.
Matrixdarstellung mit Python-Standardeingabe
RPC mit Standard-Python 3-Modulen
Python> Codierungsanleitung> PEP 0008 - Stilanleitung für Python-Code
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
Statistik mit Python
Mit PEP8 und PEP257 ist es nicht peinlich, Python-Codierung zu zeigen!
Python mit Go
[Python] Standardeingabe
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Erste Python ~ Codierung 2 ~
Bingo mit Python
Zundokokiyoshi mit Python
Konform mit pep8
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Lesen Sie WAV-Dateien nur mit dem Python-Standardpaket
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Serielle Kommunikation mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Tweets mit Python posten
Fahren Sie WebDriver mit Python
Verwenden Sie Mecab mit Python 3
[Python] Mit CGIHTTPServer umleiten
Sprachanalyse mit Python
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess
Denken Sie an Yaml mit Python
Kinesis mit Python betreiben
Erste Schritte mit Python
Verwenden Sie DynamoDB mit Python
Zundko Getter mit Python