Alle Pythonisten, die nicht der PEP8-Codierungskonvention folgen, sind gleichermaßen Kot

Ich denke, die einzige Regel, die Pythonista befolgen muss, sind die PEP8-Codierungsstandards. Wenn Sie ein Anfänger sind, sollten Sie ein Plug-In installieren, das PEP8 in Ihrem Editor überprüft, bevor Sie eine besonders seltsame Angewohnheit bekommen. Es gibt eine klare Korrelation zwischen Code mit vielen PEP8-Verstößen und Code mit vielen Fehlern und Problemen. In diesem Eintrag stellen wir vor, wie Sie einen Code oder ein Bestätigungstool einführen, das dem PEP8-Standard, dem PEP8-Standard-Konformitätsverhältnis berühmter Bibliotheken und dem PEP8-Tool für jeden Editor entspricht.

In Python PEP20 - Das Zen von Python (japanische Übersetzung )) Stellt die folgenden Einstellungen fest.

Leicht zu lesen ist gut. Besonderes zu sein ist kein Grund, gegen die Regeln zu verstoßen. Bei der Suche nach Praktikabilität kann jedoch die Natürlichkeit verloren gehen.

Sie müssen sich nicht zwingen, auf null PEP8-Verstöße zu zielen, aber ich möchte, dass Sie einheitlichen, einfach zu lesenden Code schreiben, der so weit wie möglich PEP8 entspricht. Ich habe versucht, das Ausmaß der Verstöße im Verstoßstatus der oberen PyPi-Rangbibliothek unten aufzulisten. Vielen Dank.

Entdecken Sie PEP8-Verstöße im Projekt

Mit flake8 können Sie den PEP8-Konformitätsstatus einfach überprüfen.

install


pip install flake8
flake8 {project_root} --filename=*.py --exclude=commands,migrations,[^_]*.py --max-line-length=79

Ausführungsergebnis


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



#Schrecklich, wenn Sie auf Code stoßen, der Zeile für Zeile gegen PEP8 verstößt

PEP8-Verstoßstatus berühmter Bibliotheken im PyPi-Ranking

Ich habe untersucht, wie angemessen eine PEP8-Verletzung für die 50 besten Projekte ist, indem ich sie in PyPi Ranking heruntergeladen habe. Eine PEP8-Verletzung mit einem Durchschnitt von 0,1 oder weniger pro Zeile wäre ein ausgezeichnetes Projekt. Die Erfahrung zeigt, dass Python-Anfänger, die sich der Existenz von PEP8 nicht bewusst sind, häufig Code schreiben, der 0,3 pro Zeile überschreitet.

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

Bestätigungscode für den PEP8-Verstoßstatus


# -*- 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))

#Untersuchung der PEP8-Verletzungssituation
for app_name in pypi_ranking:
    _path_base = '~/.virtualenvs/test1/lib/python2.7/site-packages/{}/'
    path = _path_base.format(app_name)

    #PEP8-Verletzung bei flake8
    try:
        flake8_warning = get_flake8_warning(path)

        #Zählen Sie die Gesamtzahl der Zeilen in der py-Datei
        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)


Ausführungsergebnis


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

Einführung des PEP8-Check-Plug-Ins für jeden Editor

--PyCharm: Es wird standardmäßig installiert. --vim: Python-Codierungsstil mit vim automatisch überprüfen und korrigieren --Emacs: Überprüfen Sie immer PEP8, während Sie den Python-Quellcode in Emacs bearbeiten --Ecrips: Kompatibel mit # PEP8, das eine Python-Entwicklungsumgebung mit Eclipse (luna) und Pydev erstellt

schließlich

Boomerang Ich habe Angst, also habe ich den PEP8-Verstoßstatus des von mir veröffentlichten Moduls überprüft. Wenn Sie das PEP8-Check-Plug-In ordnungsgemäß installieren und den Code bewusst schreiben, werden Sie wahrscheinlich nicht so sehr gegen PEP8 verstoßen.

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

Referenz

PEP 0008 -- Style Guide for Python Code PEP 20 -- The Zen of Python Das Zen von Python PyPI Ranking

Recommended Posts

Alle Pythonisten, die nicht der PEP8-Codierungskonvention folgen, sind gleichermaßen Kot
Folgen Sie allen Benutzern, die nicht auf Twitter folgen