J'aimerais avoir un retour d'information sur ces outils :
- caractéristiques ;
- l'adaptabilité ;
- la facilité d'utilisation et la courbe d'apprentissage.
J'aimerais avoir un retour d'information sur ces outils :
Eh bien, je suis un peu curieux, alors j'ai testé les trois moi-même juste après avoir posé la question ;-)
Ok, ce n'est pas une critique très sérieuse, mais voici ce que je peux dire :
J'ai essayé les outils avec les paramètres par défaut (c'est important car vous pouvez à peu près choisir vos règles de vérification) sur le script suivant :
#!/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)
En conséquence :
PyChecker
est gênant car il compile le module pour l'analyser. Si vous ne voulez pas que votre code s'exécute (par exemple, il exécute une requête SQL), c'est mauvais.PyFlakes
est censé être léger. En effet, il a décidé que le code était parfait. Je cherche quelque chose d'assez sévère, donc je ne pense pas que je vais me lancer.PyLint
a été très bavard et a noté le code 3/10 (OMG, je suis un sale codeur !).Points forts de PyLint
:
Contre de Pylint :
Correction de script (avec des chaînes de doc paresseux et des noms de variables) :
#!/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)
Merci à Rudiger Wolf j'ai découvert pep8
qui fait exactement ce que son nom suggère : faire correspondre PEP8. Il a trouvé plusieurs no-nos de syntaxe que Pylint n'a pas trouvé. Mais Pylint a trouvé des choses qui n'étaient pas spécifiquement liées à la PEP8 mais qui étaient intéressantes. Les deux outils sont intéressants et complémentaires.
Finalement, j'utiliserai les deux car ils sont vraiment faciles à installer (via les packages ou les setuptools) et le texte de sortie est si facile à enchaîner.
Pour vous donner une petite idée de leur production :
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 |= |
+-------------------------+------+---------+-----------+
Le but de pyflakes est d'analyser statiquement votre code pour s'assurer qu'il n'y aura pas d'erreurs de nom ou de variables/importations inutilisées.
Il existe un meilleur paquet IMO. flake8
il combine les deux et ajoute une complexité conditionnelle, fonctionne sur les répertoires et est généralement bon.
Running flake8
pour la première fois m'a appris que je me suis lancé dans un projet sans apprendre que Python préfère fortement les espaces pour une raison quelconque. J'ai dû utiliser --ignore W191
pour rendre la sortie utile.
Notez que les versions récentes de pep8
s'appellent désormais pycodestyle
; voir pypi.org/projet/pycodestyle @cjm : python préfère fortement les espaces car c'est ce qui est spécifié par les directives de style. Les espaces ne sont pas nécessairement supérieurs, mais la cohérence à travers la communauté est un grand avantage, et la communauté a décidé des espaces, alors faites-le.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Quel est le rapport entre la norme d'étiquetage et ceci ?
2 votes
Parce que vous utilisez ces outils pour correspondre aux PEP, en particulier la PEP 8 qui est la norme pour tous les modules Python intégrés.
0 votes
Et à quels autres peps voulez-vous qu'il corresponde ? parce que pour pep-8 il y a un tag sans ambiguïté stackoverflow.com/questions/tagged/pep8
0 votes
Vous avez raison, je vais passer à pep8.
1 votes
Le titre ne devrait-il pas être modifié pour inclure pep8 comme option ? Au début, j'ai pensé que vous parliez de la proposition, et non d'un paquet PyPI réel.
0 votes
Je vous suggère de commencer par quelque chose de très strict, de le rendre moins strict au début pour les cas manifestement douloureux, de l'utiliser pendant un certain temps, puis de le rendre plus strict par la suite en ajoutant des règles supplémentaires (pas toutes en même temps). Faites-le lentement mais faites-le.
0 votes
Je mentionne juste
prospector
;)