আমি এই সরঞ্জামগুলির উপর কিছু প্রতিক্রিয়া পেতে চাই:
- অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে;
- অভিযোজন;
- ব্যবহার এবং শেখার বক্ররেখা সহজ।
আমি এই সরঞ্জামগুলির উপর কিছু প্রতিক্রিয়া পেতে চাই:
উত্তর:
ঠিক আছে, আমি কিছুটা কৌতূহলী, তাই আমি প্রশ্নটি জিজ্ঞাসা করার পরে ঠিক 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
:
সংশোধিত স্ক্রিপ্ট (অলস ডক স্ট্রিং এবং ভেরিয়েবল নাম সহ):
#!/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 |= |
+-------------------------+------+---------+-----------+
pep8 সম্প্রতি পাইপিতে যুক্ত হয়েছিল।
আপনার কোডটি পিইপি 8 এর বিপরীতে পরীক্ষা করা এখন খুব সহজ।
flake8
, এটি দুটি সংযুক্ত করে শর্তযুক্ত জটিলতা যুক্ত করে, ডিরেক্টরিতে কাজ করে এবং সাধারণত ভাল generally
flake8
প্রথমবারের জন্য দৌড়ানো আমাকে শিখিয়েছিল যে পাইথন কোনও কারণে দৃs়তার সাথে স্থানগুলিকে বেশি পছন্দ করে তা না শিখে আমি সরাসরি কোনও প্রকল্পে ঝাঁপিয়ে পড়েছি। --ignore W191
আউটপুটকে দরকারী করতে আমাকে ব্যবহার করতে হয়েছিল।
pep8
এখন বলা হয় pycodestyle
; দেখতে pypi.org/project/pycodestyle @cjm: পাইথন জোরালোভাবে স্পেস পছন্দ কারণ যে কি শৈলী নির্দেশিকা দ্বারা উল্লিখিত হয়। স্পেসগুলি অগত্যা উচ্চতর নয়, তবে সম্প্রদায় জুড়ে ধারাবাহিকতা একটি দুর্দান্ত সুবিধা এবং সম্প্রদায়টি স্থানগুলির বিষয়ে সিদ্ধান্ত নিয়েছে, তাই এটি করুন।
:set et
(এর জন্য সংক্ষিপ্ত expandtabs
) এবং তারপরে :retab
বর্তমান বাফারের সমস্ত ট্যাবগুলিকে স্পেসে রূপান্তর করতে। এছাড়া সেট করতে দরকারী হতে পারে ts=4 sts=4 sw=4
( tabstop
, softtabstop
, shiftwidth
) প্রথম। একটি সাধারণ পদ্ধতির হিসাবে, আমি কোনও রেপোতে সঠিক সেটিংস সেট করার জন্য Editorconfig.org এবং এর প্লাগইন ব্যবহার করতে পছন্দ করি , সুতরাং আপনাকে বিভিন্ন কোডবেসের জন্য আপনার সম্পাদককে পুনরায় কনফিগার করার বিষয়ে চিন্তা করতে হবে না।