Je pense que la seule règle que Pythonista doit suivre est les PEP8 Coding Standards. Si vous êtes un débutant, vous devriez installer un plug-in qui vérifie PEP8 dans votre éditeur avant de prendre une habitude particulièrement étrange. Il existe une corrélation claire entre le code avec de nombreuses violations PEP8 et le code avec de nombreux bogues et problèmes. Dans cette entrée, nous présenterons comment introduire un code ou un outil de confirmation conforme à la norme PEP8, au ratio de conformité à la norme PEP8 de bibliothèques célèbres et à l'outil PEP8 pour chaque éditeur.
En Python, PEP20 --Le Zen de Python (traduction en japonais )) Établit les attitudes suivantes.
Facile à lire, c'est bien. Être spécial n'est pas une raison pour enfreindre les règles. Cependant, en recherchant l'aspect pratique, le naturel peut être perdu.
Vous n'avez pas à vous forcer à viser zéro violation de PEP8, mais j'aimerais que vous écriviez un code unifié, facile à lire et conforme au PEP8 autant que possible. J'ai essayé de répertorier le degré de violation acceptable dans l'état de violation de la bibliothèque supérieure de classement PyPi en bas. Je vous remercie.
Avec flake8, vous pouvez facilement vérifier l'état de conformité PEP8.
install
pip install flake8
flake8 {project_root} --filename=*.py --exclude=commands,migrations,[^_]*.py --max-line-length=79
Résultat d'exécution
xxxxxx.py:20:1: E101 indentation contains mixed spaces and tabs
xxxxxx.py:20:1: W191 indentation contains tabs
xxxxxx.py:20:9: E223 tab before operator
xxxxxx.py:20:14: E261 at least two spaces before inline comment
xxxxxx.py:21:1: W191 indentation contains tabs
xxxxxx.py:21:8: E223 tab before operator
xxxxxx.py:21:13: E261 at least two spaces before inline comment
xxxxxx.py:22:1: W191 indentation contains tabs
xxxxxx.py:22:10: E223 tab before operator
xxxxxx.py:22:14: E261 at least two spaces before inline comment
xxxxxx.py:23:1: W191 indentation contains tabs
xxxxxx.py:23:9: E223 tab before operator
#Effrayant lors de la rencontre de code qui viole PEP8 ligne par ligne
J'ai étudié dans quelle mesure une violation PEP8 est appropriée pour les 50 meilleurs projets à télécharger dans PyPi Ranking. Une violation PEP8 avec une moyenne de 0,1 ou moins par ligne serait un excellent projet. L'expérience montre que les débutants en Python qui ne sont pas au courant de l'existence de PEP8 écrivent souvent du code qui dépasse 0,3 par ligne.
Code de confirmation de l'état de violation PEP8
# -*- coding:utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
import commands
pypi_ranking = [
'simplejson',
'setuptools',
'requests',
'distribute',
'virtualenv',
'six',
'pip',
'certifi',
'boto',
'wincertstore',
'pbr',
'python-dateutil',
'nose',
'Jinja2',
'lxml',
'docutils',
'MarkupSafe',
'pyasn1',
'pytz',
'PyYAML',
'pycrypto',
'pika',
'rsa',
'coverage',
'colorama',
'Django',
'psycopg2',
'botocore',
'cffi',
'awscli',
'paramiko',
'jmespath',
'pycparser',
'SQLAlchemy',
'ecdsa',
'redis',
'selenium',
'bcdoc',
'supervisor',
'Werkzeug',
'mock',
'zc.buildout',
'httplib2',
'Paste',
'Flask',
'pep8',
'pymongo',
'carbon',
'ssl',
'meld3',
]
def get_py_file_line_count(_dir):
_cmd_base = 'find {} -name \*.py|xargs wc -l'
cmd = _cmd_base.format(_dir)
result = commands.getoutput(cmd)
return int(result.split('\n')[-1].replace(' total', ''))
def get_flake8_warning(_dir):
cmd_base = 'flake8 {} --filename=*.py --exclude=commands,migrations,[^_]*.py ' \
'--max-line-length=79|wc -l'
cmd = cmd_base.format(_dir)
return int(commands.getoutput(cmd))
# pip install
for app_name in pypi_ranking:
os.system('pip install {}'.format(app_name))
#Enquête sur la situation de violation de PEP8
for app_name in pypi_ranking:
_path_base = '~/.virtualenvs/test1/lib/python2.7/site-packages/{}/'
path = _path_base.format(app_name)
#Violation de PEP8 à flake8
try:
flake8_warning = get_flake8_warning(path)
#Comptez le nombre total de lignes dans le fichier py
lines = get_py_file_line_count(path)
per_line = float(flake8_warning) / float(lines)
print 'APP:{} TotalLine:{} PEP8-warning:{} ' \
'PEP8-warning-each-line:{}'.\
format(app_name, lines, flake8_warning, per_line)
except Exception:
print "ERROR directory does not exist:{}".format(app_name)
Résultat d'exécution
>>> python check.py
APP:simplejson TotalLine:4041 PEP8-warning:176 PEP8-warning-each-line:0.0435535758476
APP:setuptools TotalLine:9004 PEP8-warning:496 PEP8-warning-each-line:0.0550866281653
APP:requests TotalLine:17168 PEP8-warning:3218 PEP8-warning-each-line:0.187441752097
ERROR directory does not exist:distribute
APP:Jinja2 TotalLine:10806 PEP8-warning:93 PEP8-warning-each-line:0.00860632981677
APP:lxml TotalLine:6533 PEP8-warning:354 PEP8-warning-each-line:0.0541864380836
APP:docutils TotalLine:39915 PEP8-warning:6685 PEP8-warning-each-line:0.167480896906
APP:MarkupSafe TotalLine:816 PEP8-warning:8 PEP8-warning-each-line:0.00980392156863
....
--PyCharm: Il est installé en standard. --vim: Vérifier et corriger automatiquement le style de codage python avec vim --Emacs: Vérifiez toujours PEP8 lors de l'édition du code source Python dans Emacs --Ecrips: Conforme à # PEP8, qui crée un environnement de développement Python avec Eclipse (luna) et Pydev
Boomerang J'ai peur, j'ai donc vérifié l'état de violation PEP8 du module que j'ai publié. Si vous installez correctement le plug-in de contrôle PEP8 et écrivez le code consciemment, je pense que vous ne violerez pas autant PEP8.
PEP 0008 -- Style Guide for Python Code PEP 20 -- The Zen of Python Le zen de Python PyPI Ranking