পাইলট কেন একক চরিত্রের পরিবর্তনশীল নামগুলিতে আপত্তি জানায়?


100

আমি এখনও অজগর কনভেনশনগুলিতে pylintঅভ্যস্ত হয়েছি এবং আমার কোডটিকে আরও পাইথোনিক তৈরি করতে ব্যবহার করছি, তবে আমি এই বিষয়টি নিয়ে হতবাক হয়েছি যে পাইলট একক চরিত্রের পরিবর্তনশীল নাম পছন্দ করে না। আমার এর মতো কয়েকটি লুপ রয়েছে:

for x in x_values:
   my_list.append(x)

এবং যখন আমি দৌড়ব pylint, আমি পাচ্ছি Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30}- যা পরামর্শ দেয় যে একটি বৈধ ভেরিয়েবলের নাম অবশ্যই 3 থেকে 31 বর্ণের মধ্যে দীর্ঘ হওয়া উচিত তবে আমি পিইপি 8 নামকরণ কনভেনশনগুলি দেখেছি এবং একক নিম্নের অক্ষরের সাথে সুস্পষ্ট কিছুই দেখতে পাচ্ছি না I , এবং আমি সেগুলি ব্যবহার করে এমন অনেকগুলি উদাহরণ দেখি।

আমি PEP8 এ অনুপস্থিত কিছু আছে বা এটি একটি মান যা পাইলটটির জন্য অনন্য?

উত্তর:


48

পাইলিন্ট কেবল পিইপি 8 সুপারিশই যাচাই করে না। এটির নিজস্ব প্রস্তাবনাও রয়েছে যার মধ্যে একটি হ'ল একটি চলক নাম বর্ণনামূলক হওয়া উচিত এবং খুব কম নয়।

এ জাতীয় সংক্ষিপ্ত নাম এড়াতে আপনি এটি ব্যবহার করতে পারেন:

my_list.extend(x_values)

অথবা পাইলিন্টের কনফিগারেশনটি টুইঙ্ক করে পিয়েলিন্টকে কী ভেরিয়েবলের নামটি ভাল তা জানানোর জন্য।


10
_অস্থায়ী মান ধরে রাখতে ব্যবহার অ্যান্টিপ্যাটার্ন। আন্ডারস্কোর ভেরিয়েবল যেমন অপ্রাসঙ্গিক / বাতিল মূল্যবোধ, না অস্থায়ী নিয়োগ, ইঙ্গিত iবা x। তদ্ব্যতীত, দোভাষীর এটির সর্বশেষ অভিব্যক্তিটির সর্বশেষ মান ধরে রাখার বিশেষ অর্থ রয়েছে।
জেমস

130

গুর্নী অ্যালেক্স কী উল্লেখ করেছে সে সম্পর্কে আরও কিছু বিশদ: আপনি পাইলিন্টকে পরিবর্তনশীল নামের ব্যতিক্রম করতে বলতে পারেন যা (আপনি গোলাপী শপথ করেন) তিনটি অক্ষরের চেয়েও কম হলেও পুরোপুরি পরিষ্কার। শিরোনামের অধীনে আপনার পাইলিন্টক্রি ফাইলটিতে সন্ধান করুন বা যুক্ত করুন [FORMAT]:

# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_,pk,x,y

এখানে পিকে (প্রাথমিক কী জন্য), এক্স, এবং y হল আমি যুক্ত করা পরিবর্তনশীল নাম able


7
এটি সেরা উত্তর।
জিওরজিওসিরনি

4
কাজ করে বলে মনে হচ্ছে না pylint 1.8.3pylint.pycqa.org/en/1.8/user_guide/options.html
জেমস

4
হ্যাঁ এটা করে. pylint.pycqa.org/en/1.8/technical_references/…
আরটজ

4
আমি যা চাই তা হ'ল পাইলট সংক্ষিপ্ত ভারগুলি গ্রহণ করার জন্য (অনুরোধে) যখন তারা বোঝার জন্য ব্যবহৃত হয়। return [customer_address for customer_address in thing.get_customer_addresses() if customer_address.is_proper()] বনাম তুলনা করুন return [a for a in thing.get_customer_addresses() if a.is_proper()] আমি দাবি করি যে পরবর্তীটি আরও স্পষ্ট, যেমনটি প্রসঙ্গ থেকে সুস্পষ্ট। সাধারণভাবে, ভেরিয়েবলের দৈর্ঘ্যের সাথে ভেরিয়েবলের স্কোপের সাথে সম্পর্ক স্থাপন করা উচিত।
এডওয়ার্ড এম

22

দৃ strongly়ভাবে টাইপ করা ভাষায়, 1 টি বর্ণের নাম ভেরিয়েবলগুলি ঠিক-ইশ হতে পারে, কারণ আপনি সাধারণত ভেরিয়েবলের ঘোষণায় বা ফাংশন / পদ্ধতি প্রোটোটাইপে নামের পাশের প্রকারটি পান:

bool check_modality(string a, Mode b, OptionList c) {
    ModalityChecker v = build_checker(a, b);
    return v.check_option(c);
}

পাইথনে, আপনি এই তথ্যটি পান না, তাই লিখলে:

def check_modality(a, b, c):
    v = build_checker(a, b)
    return v.check_option(c)

ফাংশনটি কী করতে পারে, এবং এটি কীভাবে ডাকা হয় এবং কী ফিরে আসে সে সম্পর্কে রক্ষণাবেক্ষণ দলের জন্য আপনি কোনও ধারণা ছাড়ছেন না। পাইথনে, আপনি বর্ণনামূলক নাম ব্যবহার করার ঝোঁক:

def check_modality(name, mode, option_list):
    checker = build_checker(name, mode)
    return checker.check_option(option_list)

এবং আপনি এমনকি স্টাফগুলি কী করে এবং কী ধরণের প্রত্যাশিত তা ব্যাখ্যা করে একটি দস্তর যুক্ত করুন।


7
"সংকলিত ভাষা" এর পরিবর্তে আমি "স্পষ্টত টাইপ করা" লিখতাম। হাস্কেল, যেমন, খুব সংকলিত, তবুও আপনি পাইথনের মতো অন্তর্নিহিত ঘোষণা লিখতে পারেন।
সেবাস্তিয়ান মাচ

14
যদিও আমি এই ক্ষেত্রে আপনার সাথে একমত হই না কেন, চলক নামে 3 বা ততোধিক অক্ষর জোর করার অর্থ এই নয় যে এটি বর্ণনামূলক হবে। আমি বর্তমানে with open(FILE) as f: items = f.readlines()উদাহরণস্বরূপ ব্যবহার করছি , যেখানে পরিবর্তনশীলটি fসত্যই সুস্পষ্ট, তবে আমি পাইলিন্টের সতর্কতা পেয়েছি। এটি আমাকে ফ্লেক 8 এ পরিবর্তিত করেছে।
অ্যাক্সেল আরন সিগুরেসন

4
আপনি ভেরিয়েবল নামের 'চ' অনুমোদনের জন্য পাইলট নিয়মও পরিবর্তন করতে পারেন। আমি, জে আফার এর জন্য ইতিমধ্যে ব্যতিক্রম রয়েছে।
গুর্নি অ্যালেক্স

10
এই উত্তরটিকে হ্রাসকারী লোকদের জন্য: আমিই সেই ব্যক্তি যিনি পাইলিন্টে এই নিয়মটি প্রবর্তন করেছিলেন এবং কারণটি হুবহু দেওয়া হয়েছে। আপনি এই সিদ্ধান্তের সাথে একমত হতে পারেন না, তবে এটি তবুও প্রশ্নের উত্তর ...
গুরনি অ্যালেক্স

4
আমি সম্পূর্ণরূপে আপনার যুক্তিগুলি অনুসরণ করি, তবে প্রায়শই অ্যালগোরিদম এবং গাণিতিক প্রোগ্রামিংয়ে কিছু মান সাধারণত একটি বর্ণের সাথে থাকে। আমি মনে করি একটি ফাংশন fএকটি OptionListবলা সি এর চেয়ে সম্পূর্ণ আলাদা । বিশেষত যখন আমি এর নাম পরিবর্তন করতে পারি না functionকারণ এটি কোনও অন্তর্নির্মিতের ছায়া।
কেপ

19

আজকাল রিজেপ এক্সকে ওভাররাইড করার একটি বিকল্পও রয়েছে। অর্থাৎ আপনি যদি ভেরিয়েবল হিসাবে একক অক্ষরকে অনুমতি দিতে চান:

pylint --variable-rgx="[a-z0-9_]{1,30}$" <filename>

সুতরাং, pylintপিইপি 8 টি মিলবে এবং উপরে অতিরিক্ত লঙ্ঘন আনবে না। এছাড়াও আপনি এটি যোগ করতে পারেন .pylintrc


4
সংস্করণের জন্য > 1.8.3এটি উত্তর বলে মনে হচ্ছে। আপনার এই লাগাতে পারেন .pylintrcস্থায়ী কনফিগ জন্য ভাল হিসাবে: variable-rgx=[a-z0-9_]{1,30}$
জেমস

7
--variable-rgx = "[a-z _] [a-z0-9 _] {0,30} $" আরও কিছুটা উপযুক্ত হতে পারে, "9" একটি বৈধ ভেরিয়েবলের নাম হওয়া উচিত নয়।
এরিক লে ফোর্ট

16

গভীর কারণ আপনি মনে রাখতে পারে যে আপনার কি উদ্দেশ্যে করা হচ্ছে a, b, c, x, y, এবং zমানে যখন আপনি আপনার কোড লিখেছেন, কিন্তু অন্যরা যখন তা পাঠ, অথবা এমনকি যখন আপনি আপনার কোডে ফিরে আসা, কোড যখন আপনি দিতে আরো অনেক কিছু পাঠযোগ্য হয়ে এটি একটি শব্দার্থক নাম। আমরা একবার চকবোর্ডে স্টাফ লিখছি না এবং তারপরে এটি মুছে ফেলছি। আমরা এমন একটি কোড লিখছি যা প্রায় এক দশক বা তারও বেশি সময় ধরে থাকতে পারে এবং অনেকগুলি, বহুবার পড়তে পারে।

শব্দার্থক নাম ব্যবহার করুন। শব্দার্থিক নাম আমি ব্যবহার করেছি হয়েছে মত ratio, denominator, obj_generator, path, ইত্যাদিতে একটি অতিরিক্ত দ্বিতীয় বা দুই তাদের টাইপ করতে লাগতে পারে, কিন্তু সময় আপনি জিনিসটা কি আপনি এমনকি অর্ধেক তারপর থেকে এক ঘন্টার লিখেছিলেন চেষ্টা সংরক্ষণ করাটা কি ঠিক ।


7
ধন্যবাদ এখানে চূড়ান্ত কোডটি রয়েছে - gist.github.com/amandabee/8969833 - আমি কোড সম্পর্কে আপনার পয়েন্টটি দেখছি যা আমি (বা আপনি) এক বছরে পড়তে পারি, তবে এই ক্ষেত্রে, আমি মনে করি x এবং y সত্যই বর্ণনামূলক।
আমান্ডা

OTOH যদি আমি একটি এক্সএমএল ডকুমেন্ট থেকে <dt /> উপাদান বের করি, এটি একটি ভেরিয়েবল 'dt' তে সংরক্ষণ করি তবে এটি 'তারিখ' হিসাবে সংরক্ষণ করার সময় যথেষ্ট স্পষ্ট বলে মনে হয় (যা এই উপাদানটির প্রতিনিধিত্ব করে বলে মনে হয়) বিভ্রান্ত হতে পারে, এবং 'the_dt_field' এর মতো কিছু তৈরি করা কেবল নির্বোধ লোগোরিয়া। (না, উপাদানটির নামের উপরে আমার কোনও নিয়ন্ত্রণ নেই; এটি অন্য কারও স্কিমা।) এই জাতীয় ব্যতিক্রম অবশ্যই থাকতে হবে যা নিয়মটি পরীক্ষা করে।
মার্ক উড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.