Dans cette série Qiita, Python a été utilisé comme langage principal pour l'analyse des données. Au fait, connaissez-vous le standard de codage Python PEP8?
Le code source a généralement un "temps de lecture" plus long que le "temps d'écriture", et sur la base de ce fait, il a été créé sur la base de l'idée "écrivons du code facile à lire avec un style unifié". Est ce guide.
Style Guide for Python Code http://legacy.python.org/dev/peps/pep-0008/
Le chef de famille est bien sûr anglais, mais des bénévoles l'ont traduit en japonais.
Traduction japonaise PEP8 https://github.com/mumumu/pep8-ja
Dans tous les cas, je pense que ceux qui utilisent Python devraient absolument le lire.
Au fait, c'est beaucoup de travail de frapper un long guide dans votre tête et de le vérifier sans omission. En tant qu'être humain, vous pouvez faire des erreurs. Par conséquent, il est utile de disposer d'un outil pour vérifier si les directives sont respectées.
Dans le monde de Python, il existe une commande portant le même nom que la directive pep8. Vous pouvez vérifier en utilisant ceci.
Tout d'abord, installez-le avec pip comme suit.
Pour le moment, il est pratique d'inclure également pyflakes. Qu'est-ce que pyflakes? C'est un outil qui vérifie la grammaire de Python. Non seulement cela détecte les erreurs grammaticales évidentes, mais il détecte également le code inutile tel que les instructions d'importation indésirables. Présentons-le ensemble.
pip install pep8
pip install pyflakes
Django Pour ceux qui créent des applications Web avec le framework, [Introduisez flake8 comme alternative à pyflakes](http://naoina.plog.la/2013/05 / 09233720000000) et le bonheur sera réalisé.
Après avoir installé pep8 et pyflakes, créez un script shell comme suit et placez-le dans un répertoire de votre chemin. Au fait, j'utilise ceci comme une commande appelée pyck.
setup_environment() {
#Spécifiez le chemin d'installation de Python
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 $*
Si vous faites pyck your_file.py pour le fichier que vous voulez vérifier, la vérification grammaticale et la vérification de conformité à la directive seront effectuées. Si rien n'est sorti, il n'y a pas d'erreur. Dans le script ci-dessus, si pep8 ou pyflakes lui-même n'existe pas, il se termine par une valeur de retour de 254.
De plus, essayer de s'adapter parfaitement aux directives peut être un problème pour certains projets. Dans de tels cas, vous pouvez spécifier le numéro de référence que vous souhaitez ignorer avec l'option pep8 --ignore comme indiqué ci-dessus.
Veuillez vous référer à la documentation PEP8 pour quel numéro d'erreur correspond à quelle syntaxe.
Vérifions la syntaxe à titre d'exemple. Cette fois, j'ai préparé les fichiers suivants comme exemple.
#!/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)
Ce fichier os_walk.py est un programme simple qui répertorie la liste des fichiers dans le répertoire spécifié dans l'argument et la renvoie à l'écran.
Le programme lui-même fonctionne bien. Cependant, lorsqu'une vérification de syntaxe a été effectuée à ce sujet, la violation de directive suivante a été trouvée.
$ 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
De cette façon, si vous écrivez le code source sans y penser, vous enfreindrez immédiatement les directives.
Le message pep8 sera un peu difficile à voir jusqu'à ce que vous vous habituiez à où le réparer. Vous pouvez être encore plus satisfait de use py.test, qui affichera le message plus gentiment.
Tout d'abord, installez avec pip comme d'habitude.
pip install pep8 pytest pytest-pep8
Tout ce que vous avez à faire est de vérifier le fichier souhaité avec py.test --pep8 au lieu de la commande pep8. Vérifions os_walk.py plus tôt.
Un message plus détaillé a été affiché que le simple pep8. Dans ce cas, il est évident où se trouve le problème dans le code source et comment le résoudre.
Il existe également un outil appelé PyCharm que je n'ai pas utilisé. Vous pouvez utiliser ceci.
Maintenant que vous pouvez vérifier la conformité avec les directives du code source avec un outil, corriger tout cela manuellement peut parfois être une tâche ardue. Par conséquent, utilisez l'outil de correction automatique. autopep8 est exactement cet outil de correction automatique. Introduisons-le immédiatement.
pip install autopep8
Utilisons l'outil comme autopep8 os_walk.py pour l'exemple de code ci-dessus. Ensuite, le code source modifié a été craché sur la sortie standard comme indiqué ci-dessous.
#!/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)
Le problème semble certainement résolu. Pour l'écrire dans un fichier et le refléter, utilisez l'option -i comme autopep8 -i os_walk.py.
Si vous souhaitez modifier le code source sous le répertoire actuel en une seule fois, vous pouvez le modifier en une seule fois en procédant comme suit.
pep8 . | cut -d: -f 1 | sort | uniq | xargs autopep8 -i
De plus, comme pep8, autopep8 vous permet de spécifier le numéro d'erreur que vous souhaitez ignorer avec l'option --ignore.
Cependant, faire autopep8 -i sans réfléchir est une pratique assez rude, alors vérifiez le diff, vérifiez la grammaire avec pyflakes, ou utilisez nose. N'oubliez pas d'exécuter des tests pour garantir la qualité.
Si vous améliorez le script shell comme suit, vous pouvez spécifier l'option -i pour le corriger automatiquement avec autopep8, et sans l'option, vous pouvez simplement le cocher.
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 $*
Au fait, si cela se produit, vous voudrez vérifier la syntaxe des Emacs que vous utilisez normalement. Dans un tel cas, nous recommandons Emacs Lisp appelé python-pep8.el.
python-pep8.el https://gist.github.com/ieure/302847
Lorsque vous l'utilisez réellement, spécifiez le chemin de pep8. Réécrivez le chemin comme suit:
;; /opt/python/Si current est le chemin d'installation de Python
(defcustom python-pep8-command "/opt/python/current/bin/pep8"
"PEP8 command."
:type '(file)
:group 'python-pep8)
Tout ce que vous avez à faire maintenant est de charger python-pep8.el dans un répertoire qui se trouve dans le chemin de chargement d'Emacs. Le Lisp Emacs suivant charge python-pep8 et affecte C-c p comme liaison de clé pour la vérification de la syntaxe.
(when (load "python-pep8")
(define-key global-map "\C-c\ p" 'python-pep8))
Vous pouvez maintenant ouvrir le code Python dans Emacs et C-c p pour vérifier la syntaxe avec pep8.
Vous pouvez désormais vérifier et modifier la syntaxe de manière transparente.
Notez que C-c p fonctionnera lors de l'édition de n'importe quel fichier tel quel, il est donc préférable d'utiliser le hook du mode python.
(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)))
Emacs vous permet également d'effectuer en permanence un contrôle de conformité PEP8 et de le visualiser lors de l'édition du code source. Ceci est résumé dans un article séparé, donc voyez si vous utilisez Emacs.
PEP8 est un guide de style de code source incontournable pour tous les programmeurs Python. Tirez pleinement parti des outils et écrivez votre code afin qu'il soit conforme autant que possible aux directives.
Recommended Posts