Разве название не должно быть отредактировано, чтобы включить pep8 в качестве опции? Сначала я думал, что вы, ребята, говорите о предложении, а не о реальном пакете PyPI.
Этеш Чоудхури
Ответы:
275
Что ж, мне немного любопытно, поэтому я сам проверил 3 сразу после того, как задал вопрос ;-)
Хорошо, это не очень серьезный обзор, но вот что я могу сказать:
Я попробовал инструменты с настройками по умолчанию (это важно, потому что вы можете выбрать правила проверки) в следующем сценарии:
#!/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)
В результате :
PyCheckerхлопотно, потому что он компилирует модуль для его анализа. Если вы не хотите, чтобы ваш код выполнялся (например, он выполняет запрос SQL), это плохо.
PyFlakesдолжен быть облегченным. Действительно, он решил, что код был идеальным. Я ищу что-то довольно серьезное, поэтому я не думаю, что пойду на это.
PyLint был очень разговорчив и оценил код 3/10 (OMG, я грязный кодер!).
Сильные стороны PyLint:
Очень описательный и точный отчет.
Обнаружить некоторые запахи кода. Здесь он сказал мне оставить свой класс, чтобы написать что-то с функциями, потому что подход ОО был бесполезен в этом конкретном случае. Что-то, что я знал, но никогда не ожидал, что компьютер скажет мне :-p
Полностью исправленный код выполняется быстрее (без класса, без привязки ссылок ...).
Сделано французской командой. Хорошо, это не плюс для всех, но мне это нравится ;-)
Минусы PyLint:
Некоторые правила действительно строгие. Я знаю, что вы можете изменить его, и по умолчанию он соответствует PEP8, но является ли таким преступлением писать «для x in seq»? Видимо, да, потому что вы не можете написать имя переменной, содержащее менее 3 букв. Я изменю это.
Очень очень разговорчивый. Будьте готовы использовать свои глаза.
Исправленный скрипт (с ленивыми строками документов и именами переменных):
#!/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)
РЕДАКТИРОВАТЬ :
Благодаря Rudiger Wolf я обнаружил, pep8что он делает именно то, что предполагает его название: соответствие PEP8. Он нашел несколько синтаксисов, которые PyLint не нашел. Но PyLintнашел материал, который не был специально связан с PEP8, но интересен. Оба инструмента интересны и дополняют друг друга.
В конце концов я буду использовать оба, так как их очень легко установить (через пакеты или setuptools), а выводимый текст так просто связать.
Чтобы дать вам небольшое представление об их выводе:
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 - статически проанализировать ваш код, чтобы убедиться в отсутствии ошибок имен или неиспользуемых переменных / импортов.
culebrón
4
Я ошибаюсь или нет сильных / слабых сторон для PyChecker или PyFlakes?
Wernight
17
«Сильные стороны: очень описательный и точный отчет». Какой отчет? Этот раздел обо всех инструментах или только один?
ijk
3
Я думаю. Я совершенно очевидно написал весь про / минус только о PyLint. Понятия не имею, почему я так глупо написал. Похмелье может быть? Извините ребята.
E-удовлетворительно
13
flake8 охватывает как pyflakesи pep8. Настоятельно рекомендуем это просто с помощью одного или другого.
Этеш Чоудхури
93
pep8 был недавно добавлен в PyPi.
pep8 - программа проверки стиля Python
pep8 - это инструмент для проверки кода Python на соответствие некоторым соглашениям о стилях в PEP 8.
Теперь очень просто проверить ваш код по сравнению с pep8.
Существует более качественный пакет IMO. flake8, он объединяет два и добавляет условную сложность, работает с каталогами и в целом хорош.
DinGODzilla
1
Запуск flake8в первый раз научил меня, что я запрыгнул прямо в проект, не узнав, что Python почему-то сильно предпочитает пробелы. Я должен был использовать, --ignore W191чтобы сделать вывод полезным.
CJM
3
Обратите внимание, что последние версии pep8теперь называются pycodestyle; см. pypi.org/project/pycodestyle @cjm: python сильно предпочитает пробелы, потому что это то, что указано в рекомендациях по стилю. Пространства не обязательно превосходят друг друга, но согласованность в сообществе является большим преимуществом, и сообщество выбрало места, так что сделайте это.
Крис Л. Барнс,
Как мне лучше настроить мой редактор (BBEdit или vim), чтобы использовать пробелы для Python и табуляции для абсолютно всего остального? Кажется, что (по крайней мере, для BBEdit) это глобальная настройка.
Cjm
1
@cjm В vim вы можете сделать :set et(сокращение expandtabs), а затем :retabпреобразовать все вкладки в текущем буфере в пробелы. Он также может быть полезно для установки ts=4 sts=4 sw=4( tabstop, softtabstop, shiftwidth) в первую очередь. Что касается общего подхода, я предпочитаю использовать editorconfig.org и его плагины, чтобы установить правильные настройки в репозитории, поэтому вам не нужно беспокоиться о перенастройке вашего редактора для разных кодовых баз.
Ответы:
Что ж, мне немного любопытно, поэтому я сам проверил 3 сразу после того, как задал вопрос ;-)
Хорошо, это не очень серьезный обзор, но вот что я могу сказать:
Я попробовал инструменты с настройками по умолчанию (это важно, потому что вы можете выбрать правила проверки) в следующем сценарии:
В результате :
PyChecker
хлопотно, потому что он компилирует модуль для его анализа. Если вы не хотите, чтобы ваш код выполнялся (например, он выполняет запрос SQL), это плохо.PyFlakes
должен быть облегченным. Действительно, он решил, что код был идеальным. Я ищу что-то довольно серьезное, поэтому я не думаю, что пойду на это.PyLint
был очень разговорчив и оценил код 3/10 (OMG, я грязный кодер!).Сильные стороны
PyLint
:Минусы
PyLint
:Исправленный скрипт (с ленивыми строками документов и именами переменных):
РЕДАКТИРОВАТЬ :
Благодаря Rudiger Wolf я обнаружил,
pep8
что он делает именно то, что предполагает его название: соответствие PEP8. Он нашел несколько синтаксисов, которые PyLint не нашел. НоPyLint
нашел материал, который не был специально связан с PEP8, но интересен. Оба инструмента интересны и дополняют друг друга.В конце концов я буду использовать оба, так как их очень легко установить (через пакеты или setuptools), а выводимый текст так просто связать.
Чтобы дать вам небольшое представление об их выводе:
pep8 :
PyLint :
источник
pyflakes
иpep8
. Настоятельно рекомендуем это просто с помощью одного или другого.pep8 был недавно добавлен в PyPi.
Теперь очень просто проверить ваш код по сравнению с pep8.
Смотрите http://pypi.python.org/pypi/pep8
источник
flake8
, он объединяет два и добавляет условную сложность, работает с каталогами и в целом хорош.flake8
в первый раз научил меня, что я запрыгнул прямо в проект, не узнав, что Python почему-то сильно предпочитает пробелы. Я должен был использовать,--ignore W191
чтобы сделать вывод полезным.pep8
теперь называютсяpycodestyle
; см. pypi.org/project/pycodestyle @cjm: python сильно предпочитает пробелы, потому что это то, что указано в рекомендациях по стилю. Пространства не обязательно превосходят друг друга, но согласованность в сообществе является большим преимуществом, и сообщество выбрало места, так что сделайте это.:set et
(сокращениеexpandtabs
), а затем:retab
преобразовать все вкладки в текущем буфере в пробелы. Он также может быть полезно для установкиts=4 sts=4 sw=4
(tabstop
,softtabstop
,shiftwidth
) в первую очередь. Что касается общего подхода, я предпочитаю использовать editorconfig.org и его плагины, чтобы установить правильные настройки в репозитории, поэтому вам не нужно беспокоиться о перенастройке вашего редактора для разных кодовых баз.