Ich möchte ein Feedback zu diesen Tools erhalten:
- Eigenschaften;
- Anpassungsfähigkeit;
- Benutzerfreundlichkeit und Lernkurve.
Ich möchte ein Feedback zu diesen Tools erhalten:
Antworten:
Nun, ich bin ein bisschen neugierig, also habe ich die 3 gleich nach der Frage selbst getestet ;-)
Ok, dies ist keine sehr ernsthafte Bewertung, aber hier ist was ich sagen kann:
Ich habe die Tools mit den Standardeinstellungen (dies ist wichtig, da Sie Ihre Prüfregeln so gut wie auswählen können) im folgenden Skript ausprobiert :
#!/usr/local/bin/python
# by Daniel Rosengren modified by e-satis
import sys, time
stdout = sys.stdout
BAILOUT = 16
MAX_ITERATIONS = 1000
class Iterator(object) :
def __init__(self):
print 'Rendering...'
for y in xrange(-39, 39):
stdout.write('\n')
for x in xrange(-39, 39):
if self.mandelbrot(x/40.0, y/40.0) :
stdout.write(' ')
else:
stdout.write('*')
def mandelbrot(self, x, y):
cr = y - 0.5
ci = x
zi = 0.0
zr = 0.0
for i in xrange(MAX_ITERATIONS) :
temp = zr * zi
zr2 = zr * zr
zi2 = zi * zi
zr = zr2 - zi2 + cr
zi = temp + temp + ci
if zi2 + zr2 > BAILOUT:
return i
return 0
t = time.time()
Iterator()
print '\nPython Elapsed %.02f' % (time.time() - t)
Als Ergebnis :
PyChecker
ist problematisch, weil es das Modul kompiliert, um es zu analysieren. Wenn Sie nicht möchten, dass Ihr Code ausgeführt wird (z. B. eine SQL-Abfrage ausführt), ist das schlecht.PyFlakes
soll lite sein. In der Tat wurde entschieden, dass der Code perfekt war. Ich bin auf der Suche nach etwas ziemlich Schwerem, also glaube ich nicht, dass ich es versuchen werde.PyLint
war sehr gesprächig und bewertete den Code 3/10 (OMG, ich bin ein schmutziger Codierer!).Stärken von PyLint
:
Nachteile von PyLint
:
Korrigiertes Skript (mit faulen Dokumentzeichenfolgen und Variablennamen):
#!/usr/local/bin/python
# by Daniel Rosengren, modified by e-satis
"""
Module doctring
"""
import time
from sys import stdout
BAILOUT = 16
MAX_ITERATIONS = 1000
def mandelbrot(dim_1, dim_2):
"""
function doc string
"""
cr1 = dim_1 - 0.5
ci1 = dim_2
zi1 = 0.0
zr1 = 0.0
for i in xrange(MAX_ITERATIONS) :
temp = zr1 * zi1
zr2 = zr1 * zr1
zi2 = zi1 * zi1
zr1 = zr2 - zi2 + cr1
zi1 = temp + temp + ci1
if zi2 + zr2 > BAILOUT:
return i
return 0
def execute() :
"""
func doc string
"""
print 'Rendering...'
for dim_1 in xrange(-39, 39):
stdout.write('\n')
for dim_2 in xrange(-39, 39):
if mandelbrot(dim_1/40.0, dim_2/40.0) :
stdout.write(' ')
else:
stdout.write('*')
START_TIME = time.time()
execute()
print '\nPython Elapsed %.02f' % (time.time() - START_TIME)
BEARBEITEN:
Dank Rüdiger Wolf entdeckte ich, pep8
dass es genau das tut, was sein Name andeutet: passendes PEP8. Es wurden mehrere Syntax-No-Nos gefunden, die PyLint nicht gefunden hat. Aber PyLint
fand Sachen, die nicht speziell mit PEP8 verbunden waren, aber interessant. Beide Tools sind interessant und ergänzen sich.
Irgendwann werde ich beides verwenden, da es sehr einfach zu installieren ist (über Pakete oder Setuptools) und der Ausgabetext so einfach zu verketten ist.
Um Ihnen eine kleine Vorstellung von ihrer Ausgabe zu geben:
pep8 :
./python_mandelbrot.py:4:11: E401 multiple imports on one line
./python_mandelbrot.py:10:1: E302 expected 2 blank lines, found 1
./python_mandelbrot.py:10:23: E203 whitespace before ':'
./python_mandelbrot.py:15:80: E501 line too long (108 characters)
./python_mandelbrot.py:23:1: W291 trailing whitespace
./python_mandelbrot.py:41:5: E301 expected 1 blank line, found 3
PyLint :
************* Module python_mandelbrot
C: 15: Line too long (108/80)
C: 61: Line too long (85/80)
C: 1: Missing docstring
C: 5: Invalid name "stdout" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C: 10:Iterator: Missing docstring
C: 15:Iterator.__init__: Invalid name "y" (should match [a-z_][a-z0-9_]{2,30}$)
C: 17:Iterator.__init__: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
[...] and a very long report with useful stats like :
Duplication
-----------
+-------------------------+------+---------+-----------+
| |now |previous |difference |
+=========================+======+=========+===========+
|nb duplicated lines |0 |0 |= |
+-------------------------+------+---------+-----------+
|percent duplicated lines |0.000 |0.000 |= |
+-------------------------+------+---------+-----------+
pyflakes
und ab pep8
. Schlagen Sie es dringend vor, nur das eine oder andere zu verwenden.
pep8 wurde kürzlich zu PyPi hinzugefügt.
Es ist jetzt super einfach, Ihren Code mit pep8 zu vergleichen.
flake8
, kombiniert beide und fügt bedingte Komplexität hinzu, arbeitet mit Verzeichnissen und ist im Allgemeinen gut.
flake8
habe ich gelernt, dass ich direkt in ein Projekt gesprungen bin, ohne zu erfahren, dass Python aus irgendeinem Grund Leerzeichen bevorzugt. Ich musste verwenden --ignore W191
, um die Ausgabe nützlich zu machen.
pep8
jetzt aufgerufen werden pycodestyle
. Siehe pypi.org/project/pycodestyle @cjm: Python bevorzugt nachdrücklich Leerzeichen, da dies in den Stilrichtlinien festgelegt ist. Räume sind nicht unbedingt überlegen, aber die Konsistenz in der gesamten Community ist ein großer Vorteil, und die Community hat sich für Räume entschieden.
:set et
(kurz für expandtabs
) :retab
alle Registerkarten im aktuellen Puffer in Leerzeichen konvertieren. Es kann auch sinnvoll sein , zu setzen ts=4 sts=4 sw=4
( tabstop
, softtabstop
, shiftwidth
) aus . Im Allgemeinen bevorzuge ich die Verwendung von editorconfig.org und seiner Plugins, um die richtigen Einstellungen in einem Repo festzulegen , sodass Sie sich nicht um die Neukonfiguration Ihres Editors für verschiedene Codebasen kümmern müssen.