Bu araçlar hakkında bazı geri bildirimler almak istiyorum:
- özellikleri;
- uyum;
- kullanım kolaylığı ve öğrenme eğrisi.
Bu araçlar hakkında bazı geri bildirimler almak istiyorum:
Yanıtlar:
Biraz meraklıyım, bu yüzden soruyu sorduktan hemen sonra 3'ü kendim test ettim ;-)
Tamam, bu çok ciddi bir inceleme değil ama işte ne diyebilirim:
Aşağıdaki komut dosyasında varsayılan ayarlarla araçları denedim (hemen hemen kontrol kurallarınızı seçebileceğiniz için önemlidir):
#!/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)
Sonuç olarak :
PyChecker
zahmetlidir, çünkü modülü analiz etmek için derler. Kodunuzun çalışmasını istemiyorsanız (örneğin, bir SQL sorgusu gerçekleştirir), bu kötüdür.PyFlakes
lite olması gerekiyordu. Gerçekten de, kodun mükemmel olduğuna karar verdi. Oldukça ağır bir şey arıyorum, bu yüzden gideceğimi sanmıyorum.PyLint
çok konuşkan ve kod 3/10 (OMG, ben kirli bir kodlayıcı!) puan.Güçlü noktalar PyLint
:
Eksileri PyLint
:
Düzeltilmiş komut dosyası (tembel belge dizeleri ve değişken adlarıyla):
#!/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)
DÜZENLE :
Rudiger Wolf sayesinde pep8
, tam olarak adının önerdiğini yaptığını keşfettim : PEP8'i eşleştirmek. PyLint'in yapmadığı birkaç sözdizimi no-nos buldu. Ancak PyLint
özellikle PEP8 ile bağlantılı olmayan ama ilginç olan şeyler bulundu. Her iki araç da ilginç ve tamamlayıcıdır.
Sonunda her ikisini de kullanacağım çünkü kurulumu gerçekten kolay (paketler veya kurulum araçları aracılığıyla) ve çıktı metninin zincirlenmesi çok kolay.
Size çıktıları hakkında küçük bir fikir vermek için:
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
ve pep8
. Şiddetle sadece birini veya diğerini kullanarak önerin.
pep8 yakın zamanda PyPi'ye eklendi.
Kodunuzu pep8'e karşı kontrol etmek artık çok kolay.
flake8
, ikisini birleştirir ve koşullu karmaşıklık ekler, dizinler üzerinde çalışır ve genellikle iyidir.
flake8
İlk kez koşmak bana Python'un bir sebepten ötürü boşlukları tercih ettiğini öğrenmeden bir projeye atladığımı öğretti. --ignore W191
Çıktıyı faydalı kılmak için kullanmak zorunda kaldım .
pep8
artık çağrıldığını unutmayın pycodestyle
; bkz. pypi.org/project/pycodestyle @cjm: python boşlukları kesinlikle tercih ediyor çünkü stil yönergeleri tarafından belirtilen şey bu. Alanlar mutlaka üstün değildir, ancak topluluk genelinde tutarlılık büyük bir avantajdır ve topluluk alanlara karar vermiştir, bunu yapın.
:set et
(kısaltmak expandtabs
) ve sonra yapabilirsiniz :retab
. Ayrıca ayarlamak yararlı olabilir ts=4 sts=4 sw=4
( tabstop
, softtabstop
, shiftwidth
) ilk. Genel bir yaklaşım olarak, bir repoda doğru ayarları ayarlamak için editorconfig.org ve eklentilerini kullanmayı tercih ediyorum , bu nedenle editörünüzü farklı kod tabanları için yeniden yapılandırmak konusunda endişelenmenize gerek yok.