Pylint, Pychecker 또는 Pyflakes? [닫은
문제
이 도구에 대한 피드백을 받고 싶습니다.
- 특징;
- 적응성;
- 사용 편의성 및 학습 곡선.
해결책
글쎄, 나는 약간 궁금하다. 그래서 나는 질문을 한 후 바로 3을 직접 테스트했다 ;-)
좋아, 이것은 매우 심각한 검토가 아니지만 여기에 내가 말할 수있는 것이 있습니다.
도구를 시도했습니다 기본 설정으로 다음 스크립트에서 (확인 규칙을 거의 선택할 수 있기 때문에 중요합니다) :
#!/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)
결과적으로 :
PyChecker
모듈을 분석하기 위해 모듈을 컴파일하기 때문에 문제가됩니다. 코드가 실행되기를 원하지 않으면 (예 : SQL 쿼리를 수행합니다), 그것은 나쁘다.PyFlakes
라이트로 여겨집니다. 실제로, 그것은 코드가 완벽하다고 결정했습니다. 나는 아주 심한 것을 찾고 있으므로 갈 것이라고 생각하지 않습니다.PyLint
매우 말이 많았으며 코드 3/10을 평가했습니다 (OMG, 더러운 코더입니다!).
강력한 포인트 PyLint
:
- 매우 설명적이고 정확한 보고서.
- 일부 코드 냄새를 감지하십시오. 이 특정 사례에서 OO 접근법이 쓸모가 없기 때문에 기능이있는 무언가를 쓰기 위해 수업을 삭제하라고 말했습니다. 내가 알고 있었지만 컴퓨터가 나에게 말할 것을 기대 한 적이 없다 : -p
- 완전히 수정 된 코드가 더 빨리 실행됩니다 (클래스 없음, 참조 바인딩 없음 ...).
- 프랑스 팀에 의해 만들어졌습니다. 좋아, 그것은 모두에게 플러스가 아니지만 나는 그것을 좋아한다 ;-)
단점 PyLint
:
- 일부 규칙은 정말 엄격합니다. 나는 당신이 그것을 바꿀 수 있고 기본값은 pep8과 일치한다는 것을 알고 있지만, 'seq 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 = 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)
편집하다 :
Rudiger Wolf 덕분에 나는 발견했다 pep8
그것은 그 이름이 제안한 바를 정확하게합니다 : pep8 매칭. Pylint가하지 않은 몇 가지 구문 No-Nos를 발견했습니다. 하지만 PyLint
PEP8과 구체적으로 연결되어 있지 않지만 흥미로운 것을 발견했습니다. 두 도구 모두 흥미롭고 보완 적입니다.
결국 패키지 또는 세트 튜틀을 통해 쉽게 설치하기 쉽기 때문에 출력 텍스트를 쉽게 체인하기 쉽기 때문에 둘 다 사용하겠습니다.
그들의 출력에 대한 약간의 아이디어를 제공하기 위해 :
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
파일린트:
************* 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 |= |
+-------------------------+------+---------+-----------+
다른 팁
PEP8은 최근 PYPI에 추가되었습니다.
- PEP8- 파이썬 스타일 가이드 체커
- PEP8은 PEP 8의 일부 스타일 규칙에 대해 파이썬 코드를 확인하는 도구입니다.
이제 PEP8에 대한 코드를 확인하는 것은 매우 쉽습니다.
제휴하지 않습니다 StackOverflow