পাইলিন্ট, পাইচেকার বা পাইফ্লেকস? [বন্ধ]


390

আমি এই সরঞ্জামগুলির উপর কিছু প্রতিক্রিয়া পেতে চাই:

  • অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে;
  • অভিযোজন;
  • ব্যবহার এবং শেখার বক্ররেখা সহজ।

1
এর সাথে ট্যাগ স্ট্যান্ডার্ডের কী সম্পর্ক আছে?
সাইলেন্টগোস্ট

2
কারণ আপনি এই সরঞ্জামগুলি পিইপি মেলানোর জন্য ব্যবহার করেন, বিশেষত পিইপি 8 যা সমস্ত অন্তর্নির্মিত পাইথন মডিউলগুলির জন্য মান।
ই-সন্তুষ্ট

এবং অন্য কোন পিপসের সাথে এটি মিলতে চান? কারণ বীর্য -8 সেখানে একটি দ্ব্যর্থহীন ট্যাগ হল stackoverflow.com/questions/tagged/pep8
SilentGhost

আপনি ঠিক বলেছেন, আমি পেপ 8
ই-সন্তুষ্ট

1
বিকল্প হিসাবে পেপ 8 অন্তর্ভুক্ত করতে শিরোনামটি সম্পাদনা করা উচিত নয়? প্রথমে, আমি ভেবেছিলাম আপনি ছেলেরা প্রস্তাবটির বিষয়ে কথা বলছেন, প্রকৃত পাইপিআই প্যাকেজ নয়।
এহতেশ চৌধুরী

উত্তর:


275

ঠিক আছে, আমি কিছুটা কৌতূহলী, তাই আমি প্রশ্নটি জিজ্ঞাসা করার পরে ঠিক 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সমস্যাজনক কারণ এটি মডিউলটিকে বিশ্লেষণ করতে সংকলন করে। আপনি যদি নিজের কোডটি চালনা করতে না চান (যেমন, এটি একটি এসকিউএল কোয়েরি সম্পাদন করে), এটি খারাপ।
  • PyFlakesলাইট হওয়ার কথা। প্রকৃতপক্ষে, এটি সিদ্ধান্ত নিয়েছে যে কোডটি নিখুঁত ছিল। আমি বেশ তীব্র কিছু খুঁজছি যাতে আমি মনে করি না যে আমি এটির জন্য যাব।
  • PyLint খুব কথাবার্তা হয়েছে এবং কোড 3-10 রেট দেওয়া হয়েছে (ওএমজি, আমি একটি নোংরা কোডার!)।

এর শক্তিশালী পয়েন্ট PyLint:

  • খুব বর্ণনামূলক এবং সঠিক প্রতিবেদন।
  • কিছু কোডের গন্ধ সনাক্ত করুন। এখানে এটি আমাকে বলেছিল যে আমার ক্লাসটি ফাংশনগুলির সাথে কিছু লিখতে লিখতে হবে কারণ এই নির্দিষ্ট ক্ষেত্রে ওও পদ্ধতির অকেজো ছিল। আমি জানতাম এমন কিছু, তবে কখনই কম্পিউটারটি আমাকে বলার আশা করেনি :- পি
  • সম্পূর্ণরূপে সংশোধিত কোডটি দ্রুত চলে (কোনও শ্রেণি নেই, কোনও রেফারেন্স বাইন্ডিং নেই ...)।
  • একটি ফরাসী দল তৈরি করেছে। ঠিক আছে এটি প্রত্যেকের জন্য প্লাস নয়, তবে আমি এটি পছন্দ করি ;-)

কনস PyLint:

  • কিছু নিয়ম সত্যিই কঠোর। আমি জানি যে আপনি এটি পরিবর্তন করতে পারেন এবং ডিফল্টটি পিইপি 8 এর সাথে মেলে, তবে 'এক্স ইন সিক' লিখতে কি এমন অপরাধ? দৃশ্যত হ্যাঁ কারণ আপনি 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ওল্ফকে ধন্যবাদ, আমি আবিষ্কার করেছি যে এর নামটি যা বোঝায় ঠিক তেমন করে: পিইপি 8 এর সাথে মিলে। এটি বেশ কয়েকটি সিনট্যাক্স নং-সন্ধান পেয়েছে যা পাইলিন্ট করেনি। তবে PyLintএমন স্টাফ পাওয়া গেছে যা PEP8 এর সাথে বিশেষভাবে লিঙ্কিত ছিল না তবে আকর্ষণীয়। দুটি সরঞ্জামই আকর্ষণীয় এবং পরিপূরক।

অবশেষে আমি উভয়ই ব্যবহার করব যেহেতু সত্যই ইনস্টল করা সহজ (প্যাকেজ বা সেটআপলগুলির মাধ্যমে) এবং আউটপুট পাঠ্যটি চেইন করা সহজ easy

তাদের আউটপুট সম্পর্কে আপনাকে একটু ধারণা দেওয়ার জন্য:

পিপ 8 :

./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    |=          |
+-------------------------+------+---------+-----------+

18
পাইফ্লেকের উদ্দেশ্য হ'ল কোনও নাম ত্রুটি বা অব্যবহৃত ভেরিয়েবল / আমদানি থাকবে না তা নিশ্চিত করার জন্য আপনার কোডটি স্থিতিশীলভাবে বিশ্লেষণ করা।
culebrón

4
আমি কি এইটি ভুল করছি বা পাইচেকার বা পাইফ্লেকসের পক্ষে কোনও শক্ত / দুর্বল বিন্দু নেই?
ওয়ার্নাইট

17
"শক্তিশালী পয়েন্ট: খুব বর্ণনামূলক এবং সঠিক প্রতিবেদন।" কোন রিপোর্ট? এই বিভাগটি সমস্ত সরঞ্জাম সম্পর্কে বা একটি মাত্র সম্পর্কে?
ইজ্ক

3
আমি অবাক. আমি স্পষ্টতই কেবল পাইলিন্ট সম্পর্কে পুরো প্রো / কন লিখেছি। কেন আমি এই বোকা উপায়ে লিখলাম আমার কোনও ধারণা নেই। হ্যাংওভার হতে পারে? দুক্ষিত বন্ধুরা.
ই-সন্তুষ্ট

13
flake8 উভয় pyflakesএবং কভার pep8। দৃ one়ভাবে কেবল একটি বা অন্যটি ব্যবহার করার পরামর্শ দিন।
এহতেশ চৌধুরী

93

pep8 সম্প্রতি পাইপিতে যুক্ত হয়েছিল।

  • পিপ 8 - পাইথন স্টাইল গাইড চেকার
  • পিইপি 8 হ'ল পিইপি 8-র কিছু স্টাইলের সম্মেলনের বিরুদ্ধে আপনার পাইথন কোডটি যাচাই করার একটি সরঞ্জাম।

আপনার কোডটি পিইপি 8 এর বিপরীতে পরীক্ষা করা এখন খুব সহজ।

Http://pypi.python.org/pypi/pep8 দেখুন


57
আইএমও আরও ভাল প্যাকেজ আছে। flake8, এটি দুটি সংযুক্ত করে শর্তযুক্ত জটিলতা যুক্ত করে, ডিরেক্টরিতে কাজ করে এবং সাধারণত ভাল generally
দিনজিওডজিলা

1
flake8প্রথমবারের জন্য দৌড়ানো আমাকে শিখিয়েছিল যে পাইথন কোনও কারণে দৃs়তার সাথে স্থানগুলিকে বেশি পছন্দ করে তা না শিখে আমি সরাসরি কোনও প্রকল্পে ঝাঁপিয়ে পড়েছি। --ignore W191আউটপুটকে দরকারী করতে আমাকে ব্যবহার করতে হয়েছিল।
সিজেএম

3
নোট করুন যে সাম্প্রতিক সংস্করণগুলি pep8এখন বলা হয় pycodestyle; দেখতে pypi.org/project/pycodestyle @cjm: পাইথন জোরালোভাবে স্পেস পছন্দ কারণ যে কি শৈলী নির্দেশিকা দ্বারা উল্লিখিত হয়। স্পেসগুলি অগত্যা উচ্চতর নয়, তবে সম্প্রদায় জুড়ে ধারাবাহিকতা একটি দুর্দান্ত সুবিধা এবং সম্প্রদায়টি স্থানগুলির বিষয়ে সিদ্ধান্ত নিয়েছে, তাই এটি করুন।
ক্রিস এল বার্নস

পাইথনের জন্য স্পেস এবং অন্য সব কিছুর জন্য ট্যাবগুলি ব্যবহার করার জন্য আমি কীভাবে আমার সম্পাদককে (বিবিইডিট বা ভিএম) কনফিগার করব? দেখে মনে হচ্ছে (কমপক্ষে BBEdit এর জন্য) এটি একটি বিশ্বব্যাপী সেটিংস।
সিজেএম

1
@cjm ভিমে, আপনি করতে পারেন :set et(এর জন্য সংক্ষিপ্ত expandtabs) এবং তারপরে :retabবর্তমান বাফারের সমস্ত ট্যাবগুলিকে স্পেসে রূপান্তর করতে। এছাড়া সেট করতে দরকারী হতে পারে ts=4 sts=4 sw=4( tabstop, softtabstop, shiftwidth) প্রথম। একটি সাধারণ পদ্ধতির হিসাবে, আমি কোনও রেপোতে সঠিক সেটিংস সেট করার জন্য Editorconfig.org এবং এর প্লাগইন ব্যবহার করতে পছন্দ করি , সুতরাং আপনাকে বিভিন্ন কোডবেসের জন্য আপনার সম্পাদককে পুনরায় কনফিগার করার বিষয়ে চিন্তা করতে হবে না।
কোডারমনকিফুয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.