Tous les pythonistes qui ne suivent pas la convention de codage PEP8 sont également des fèces

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.

Découvrez les violations PEP8 dans le projet

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

Statut de violation PEP8 de bibliothèques célèbres dans le classement PyPi

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.

スクリーンショット 2015-11-04 16.22.50.png

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

Présentation du plug-in de contrôle PEP8 pour chaque éditeur

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

à la fin

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.

スクリーンショット 2015-11-04 16.48.43.png

référence

PEP 0008 -- Style Guide for Python Code PEP 20 -- The Zen of Python Le zen de Python PyPI Ranking

Recommended Posts

Tous les pythonistes qui ne suivent pas la convention de codage PEP8 sont également des fèces
Suivez tous les utilisateurs qui ne suivent pas sur Twitter