Czy tytuł nie powinien być edytowany tak, aby zawierał pep8 jako opcję? Na początku myślałem, że rozmawiacie o propozycji, a nie o prawdziwym pakiecie PyPI.
Ehtesh Choudhury,
Odpowiedzi:
275
Cóż, jestem trochę ciekawy, więc sam przetestowałem 3 zaraz po zadaniu pytania ;-)
Ok, to nie jest bardzo poważna recenzja, ale oto co mogę powiedzieć:
Wypróbowałem narzędzia z ustawieniami domyślnymi (jest to ważne, ponieważ możesz właściwie wybrać reguły sprawdzania) na następującym skrypcie:
#!/usr/local/bin/python# by Daniel Rosengren modified by e-satisimport sys, time
stdout = sys.stdout
BAILOUT =16
MAX_ITERATIONS =1000classIterator(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.0for 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
return0
t = time.time()Iterator()print'\nPython Elapsed %.02f'%(time.time()- t)
W rezultacie :
PyCheckerjest kłopotliwy, ponieważ kompiluje moduł do jego analizy. Jeśli nie chcesz, aby Twój kod działał (np. Wykonuje zapytanie SQL), to źle.
PyFlakesma być lite. Rzeczywiście zdecydował, że kod był doskonały. Szukam czegoś dość surowego, więc nie sądzę, żebym poszedł na to.
PyLint był bardzo rozmowny i ocenił kod 3/10 (OMG, jestem brudnym programistą!).
Zalety PyLint:
Bardzo opisowy i dokładny raport.
Wykryj niektóre zapachy kodu. Tutaj powiedział mi, aby porzucić moją klasę, aby napisać coś z funkcjami, ponieważ podejście OO było bezużyteczne w tym konkretnym przypadku. Coś, co wiedziałem, ale nigdy nie spodziewałem się, że komputer powie mi :-p
W pełni poprawiony kod działa szybciej (brak klasy, brak powiązania referencyjnego ...).
Wykonane przez francuski zespół. Ok, to nie jest plus dla wszystkich, ale mi się podoba ;-)
Wady PyLint:
Niektóre zasady są bardzo surowe. Wiem, że możesz to zmienić i że domyślnie jest to dopasowanie PEP8, ale czy pisanie „dla x w seq” jest takim przestępstwem? Najwyraźniej tak, ponieważ nie można napisać nazwy zmiennej składającej się z mniej niż 3 liter. Zmienię to.
Bardzo bardzo rozmowny. Bądź gotowy do użycia oczu.
Poprawiony skrypt (z leniwymi ciągami dokumentów i nazwami zmiennych):
#!/usr/local/bin/python# by Daniel Rosengren, modified by e-satis"""
Module doctring
"""import time
from sys import stdout
BAILOUT =16
MAX_ITERATIONS =1000def mandelbrot(dim_1, dim_2):"""
function doc string
"""
cr1 = dim_1 -0.5
ci1 = dim_2
zi1 =0.0
zr1 =0.0for 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
return0def 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)
EDYTOWAĆ :
Dzięki Rudiger Wolf odkryłem, pep8że robi dokładnie to, co sugeruje jego nazwa: dopasowanie PEP8. Znaleziono kilka składni no-nos, których PyLint nie. Ale PyLintznalazłem rzeczy, które nie były specjalnie powiązane z PEP8, ale były interesujące. Oba narzędzia są interesujące i uzupełniają się.
W końcu skorzystam z obu, ponieważ są naprawdę łatwe do zainstalowania (za pomocą pakietów lub setuptools), a tekst wyjściowy jest tak łatwy do połączenia w łańcuch.
Aby dać ci pojęcie o ich wynikach:
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 ma na celu statystyczną analizę kodu, aby upewnić się, że nie wystąpią błędy nazw ani nieużywane zmienne / import.
culebrón
4
Czy mylę się, czy nie ma mocnej / słabej strony PyChecker ani PyFlakes?
Wernight
17
„Zalety: bardzo opisowy i dokładny raport”. Który raport? Czy ta sekcja dotyczy wszystkich narzędzi, czy tylko jednego?
ijk
3
Zastanawiam się. Oczywiście napisałem cały pro / con tylko o PyLint. Nie mam pojęcia, dlaczego napisałem w ten głupi sposób. Może kac? Przepraszam chłopaki.
e-satis
13
flake8 obejmuje zarówno pyflakesi pep8. Zdecydowanie sugeruj to nad używaniem jednego lub drugiego.
Ehtesh Choudhury
93
pep8 został niedawno dodany do PyPi.
pep8 - narzędzie sprawdzające przewodnik po stylu Python
pep8 to narzędzie do sprawdzania kodu Pythona pod kątem niektórych konwencji stylów w PEP 8.
Teraz bardzo łatwo jest sprawdzić kod w stosunku do pep8.
Jest lepszy pakiet IMO. flake8, łączy te dwa elementy i dodaje warunkową złożoność, działa na katalogach i ogólnie jest dobry.
DinGODzilla,
1
Bieganie flake8po raz pierwszy nauczyło mnie, że wskoczyłem od razu do projektu, nie dowiadując się, że z jakiegoś powodu Python zdecydowanie preferuje spacje. Musiałem użyć, --ignore W191aby wynik był użyteczny.
cjm
3
Zauważ, że ostatnie wersje pep8są teraz nazywane pycodestyle; zobacz pypi.org/project/pycodestyle @cjm: python zdecydowanie preferuje spacje, ponieważ tak określają wytyczne stylu. Miejsca niekoniecznie są lepsze, ale spójność w całej społeczności jest wielką zaletą, a społeczność decyduje o przestrzeniach, więc zrób to.
Chris L. Barnes,
Jak najlepiej skonfigurować mój edytor (BBEdit lub vim), aby używać spacji w Pythonie i tabulatorów do absolutnie wszystkiego innego? Wydaje się, że (przynajmniej dla BBEdit) jest to ustawienie globalne.
cjm
1
@cjm W vimie możesz zrobić :set et(skrót expandtabs), a następnie :retabprzekonwertować wszystkie tabulatory w bieżącym buforze na spacje. Może on także być przydatny do ustawiania ts=4 sts=4 sw=4( tabstop, softtabstop, shiftwidth) po raz pierwszy. Jeśli chodzi o ogólne podejście, wolę używać Editorconfig.org i jego wtyczek, aby ustawić odpowiednie ustawienia w repozytorium, więc nie musisz się martwić o zmianę konfiguracji edytora dla różnych baz kodu.
Odpowiedzi:
Cóż, jestem trochę ciekawy, więc sam przetestowałem 3 zaraz po zadaniu pytania ;-)
Ok, to nie jest bardzo poważna recenzja, ale oto co mogę powiedzieć:
Wypróbowałem narzędzia z ustawieniami domyślnymi (jest to ważne, ponieważ możesz właściwie wybrać reguły sprawdzania) na następującym skrypcie:
W rezultacie :
PyChecker
jest kłopotliwy, ponieważ kompiluje moduł do jego analizy. Jeśli nie chcesz, aby Twój kod działał (np. Wykonuje zapytanie SQL), to źle.PyFlakes
ma być lite. Rzeczywiście zdecydował, że kod był doskonały. Szukam czegoś dość surowego, więc nie sądzę, żebym poszedł na to.PyLint
był bardzo rozmowny i ocenił kod 3/10 (OMG, jestem brudnym programistą!).Zalety
PyLint
:Wady
PyLint
:Poprawiony skrypt (z leniwymi ciągami dokumentów i nazwami zmiennych):
EDYTOWAĆ :
Dzięki Rudiger Wolf odkryłem,
pep8
że robi dokładnie to, co sugeruje jego nazwa: dopasowanie PEP8. Znaleziono kilka składni no-nos, których PyLint nie. AlePyLint
znalazłem rzeczy, które nie były specjalnie powiązane z PEP8, ale były interesujące. Oba narzędzia są interesujące i uzupełniają się.W końcu skorzystam z obu, ponieważ są naprawdę łatwe do zainstalowania (za pomocą pakietów lub setuptools), a tekst wyjściowy jest tak łatwy do połączenia w łańcuch.
Aby dać ci pojęcie o ich wynikach:
pep8 :
PyLint :
źródło
pyflakes
ipep8
. Zdecydowanie sugeruj to nad używaniem jednego lub drugiego.pep8 został niedawno dodany do PyPi.
Teraz bardzo łatwo jest sprawdzić kod w stosunku do pep8.
Zobacz http://pypi.python.org/pypi/pep8
źródło
flake8
, łączy te dwa elementy i dodaje warunkową złożoność, działa na katalogach i ogólnie jest dobry.flake8
po raz pierwszy nauczyło mnie, że wskoczyłem od razu do projektu, nie dowiadując się, że z jakiegoś powodu Python zdecydowanie preferuje spacje. Musiałem użyć,--ignore W191
aby wynik był użyteczny.pep8
są teraz nazywanepycodestyle
; zobacz pypi.org/project/pycodestyle @cjm: python zdecydowanie preferuje spacje, ponieważ tak określają wytyczne stylu. Miejsca niekoniecznie są lepsze, ale spójność w całej społeczności jest wielką zaletą, a społeczność decyduje o przestrzeniach, więc zrób to.:set et
(skrótexpandtabs
), a następnie:retab
przekonwertować wszystkie tabulatory w bieżącym buforze na spacje. Może on także być przydatny do ustawianiats=4 sts=4 sw=4
(tabstop
,softtabstop
,shiftwidth
) po raz pierwszy. Jeśli chodzi o ogólne podejście, wolę używać Editorconfig.org i jego wtyczek, aby ustawić odpowiednie ustawienia w repozytorium, więc nie musisz się martwić o zmianę konfiguracji edytora dla różnych baz kodu.