سؤال

أود الحصول على بعض ردود الفعل على هذه الأدوات على :

  • الميزات ؛
  • القدرة على التكيف:
  • سهولة استخدام منحنى التعلم.
هل كانت مفيدة؟

المحلول

أنا غريبة بعض الشيء, لذلك أنا مجرد اختبار 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 مزعجة لأنه يجمع وحدة لتحليل ذلك.إذا كنت لا تريد الخاص بك بتشغيل رمز (هـ.g, ينفذ استعلام SQL), هذا سيء.
  • PyFlakes هو من المفترض أن يكون لايت.بل إنه قرر أن كان رمز الكمال.أنا أبحث عن شيء شديد جدا لذلك أنا لا أعتقد أنني سوف تذهب.
  • PyLint وقد ثرثارة جدا و مصنفة رمز 3/10 (OMG أنا القذرة المبرمج !).

سترونجس نقاط PyLint:

  • وصفي للغاية ودقيقة التقرير.
  • الكشف عن بعض التعليمات البرمجية الروائح.هنا قال لي لإسقاط صفي أن أكتب شيئا مع الوظائف لأن OO النهج غير مجدية في هذه الحالة المحددة.ما كنت أعرف ، ولكن لم يتوقع كمبيوتر ليقول لي :-p
  • تماما تصحيح كود تشغيل أسرع (أي فئة ، أي مرجعية ملزمة...).
  • أدلى الفريق الفرنسي.حسنا انها ليست زائد عن الجميع, ولكن أنا أحب ذلك ;-)

سلبيات PyLint:

  • بعض قواعد صارمة جدا.وأنا أعلم أنك يمكن أن تغير ذلك الوضع الافتراضي مباراة PEP8, ولكن هل هو مثل هذه الجريمة في الكتابة 'x في 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)

تحرير :

بفضل روديغر الذئب, اكتشفت pep8 الذي يفعل بالضبط ما يوحي اسمها:مطابقة PEP8.وقد وجدت العديد من جملة لا nos أن 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    |=          |
+-------------------------+------+---------+-----------+

نصائح أخرى

pep8 تم مؤخرا إضافة إلى PyPi.

  • pep8 - الثعبان نمط دليل مدقق
  • pep8 هو أداة التحقق من كود بايثون ضد بعض من نمط الاتفاقيات بيب 8.

هو الآن من السهل التحقق من التعليمات البرمجية الخاصة بك ضد pep8.

انظر http://pypi.python.org/pypi/pep8

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top