我想得到一些关于这些工具的反馈: python
好吧,我有点好奇,因此我只是在问了问题以后当即测试了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
点: 编码
PyLint
缺点: spa
更正的脚本(使用惰性文档字符串和变量名称): code
#!/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)
编辑: ip
感谢Rudiger Wolf,我发现pep8
正如其名称所暗示的那样:匹配PEP8。 它已经找到了PyLint没有的几个语法no-nos。 但PyLint
发现了与PEP8没有特别关联但有趣的东西。 这两种工具都颇有趣且互补。 ci
最终我会使用二者,由于真的很容易安装(经过包或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 |= | +-------------------------+------+---------+-----------+
pep8最近加入了PyPi。
如今能够很是容易地检查您的代码与pep8。