ভেরিয়েবল এবং ফাংশন নামের জন্য পাইথনে নামকরণ কনভেনশন কী?


772

একটি সি # ব্যাকগ্রাউন্ড থেকে আসা ভেরিয়েবল এবং পদ্ধতির নামের জন্য নামকরণ কনভেনশন সাধারণত হয় উট কেস বা পাস্কেলকেস:

// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()

পাইথনে, আমি উপরেরটি দেখেছি কিন্তু আমি আন্ডারস্কোরগুলি ব্যবহার করাও দেখেছি:

# python example
this_is_my_variable = 'a'
def this_is_my_function():

পাইথনের জন্য আরও পছন্দসই, সংজ্ঞাযুক্ত কোডিং স্টাইলটি কি আছে?

উত্তর:


867

পাইথন পিইপি 8 দেখুন: ফাংশন এবং পরিবর্তনশীল নাম :

পঠনযোগ্যতা উন্নত করার জন্য আন্ডারস্কোর দ্বারা পৃথক শব্দের সাথে ফাংশনের নামগুলি ছোট ছোট হওয়া উচিত ।

চলক নামগুলি একই কনভেনশনটিকে ফাংশন নাম হিসাবে অনুসরণ করে।

মিশ্র ক্যাস কেবলমাত্র প্রাসঙ্গিক ক্ষেত্রে অনুমোদিত যেখানে ইতিমধ্যে বিদ্যমান শৈলী (যেমন থ্রেডিং.পি ), পিছনের সামঞ্জস্যতা বজায় রাখতে।


127
পিইপি = পাইথন বর্ধনের প্রস্তাব।
পিটার মর্টেনসেন 21

8
@ রিকি রবিনসন আপনি কোন মস্তিষ্ক-মৃত কোড সম্পাদক ব্যবহার করছেন, এটি জানেন না যে আন্ডারস্কোর একটি শব্দ চালিয়ে যাচ্ছে? যে অনেক বিনামূল্যে। আমি যদি আইডিই না পাওয়া যায় তবে নোটপ্যাড ++ ব্যবহার করি। তার জন্য, পাইথন সম্পাদনার জন্য একটি টেম্পলেট ডাউনলোড করতে পারেন। (অন্যরা আরও কার্যকর নিখরচায় ডাউনলোডের প্রস্তাব দিতে পারেন))
টুলমেকারস্টেভ

57
আন্ডারস্কার্ড স্টাইলের জন্য একটি ক্ষেত্রে আপনি এক-বর্ণের শব্দ আরও ভালভাবে ব্যবহার করতে পারেন। (একটি বরং মূর্খ) উদাহরণ হিসাবে, findMeAClassসম্ভবত তুলনায় খারাপ find_me_a_class
হেলটনবাইকার

9
আমি দেখতে পেলাম যে সমস্ত ছোট হাতের অক্ষরের নাম কনভেনশন বৈজ্ঞানিক কম্পিউটিংয়ে উপযুক্ত নয়, যেখানে প্রায়শই একটি সুপরিচিত ধ্রুবক, টেনসর ইত্যাদি জুড়ে আসে যা মূলধন বর্ণ দ্বারা চিহ্নিত করা হয়।
andreasdr

12
@rr PEP8 হ'ল "স্টাইল গাইড", এবং নিজেকে একটি কনভেনশন হিসাবে বর্ণনা করেছেন, মানক নয়। এটি "নিয়ম" সর্বদা অনুসরণ না করার কারণগুলিও পরিষ্কারভাবে ব্যাখ্যা করে।
তাহান

709

গুগল পাইথন স্টাইল গাইড নিম্নলিখিত সম্মেলন রয়েছে:

module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name

একটি অনুরূপ নামকরণ স্কিম প্রয়োগ করা উচিত CLASS_CONSTANT_NAME


37
ক) আমি উদাহরণ পছন্দ - ধন্যবাদ। খ) ক্যামেলকেস এবং আন্ডারস্কোরগুলির অপ্রচলিত মিশ্রণ? তবে: পাইথন এবং এর আরও নমনীয় ডেটা মডেলটিতে নতুন হওয়ার কারণে আমি বাজি ধরছি গুগলের গাইডের পিছনে দৃ solid় চিন্তাভাবনা আছে ...
ম্যাথু কর্নেল

19
আপনি যতক্ষণ না আটকে থাকবেন @ ম্যাথহে কর্নেল মিশ্রণটি খারাপ নয়। এটি আসলে পাঠযোগ্যতা সহজ করে তোলে যদি আপনি জানেন যে ফাংশনগুলিতে আন্ডারস্কোর থাকে এবং শ্রেণি নেই।
পিথিকোস

1
@ ম্যাথেজ কর্নেল আমি ধরেই নেব অজগরটির সাথে এর কোনও যোগসূত্র রয়েছে। গো প্রকৃতপক্ষে সৌন্দর্যের মানদণ্ডকে কার্যকর করে এবং আপনি যদি তাদের কোঁকড়া ধনুর্বন্ধনী কনভেনশন মেনে চলেন না তবে সংকলন করতে ব্যর্থ হবেন। মূলত, এটি আসলেই একটি ডাইস রোল যা কিনা আসলেই সাবধানতার সাথে চিন্তাভাবনা করা হয়েছিল, বা তারা যেভাবে কাজগুলি করে তা সত্যিই পছন্দ করে।
পার্থিয়ান শট

আপনি কি কোনও GLOBAL_CONSTANT_NAME কে ধ্রুবক স্ট্যাটিক বৈশিষ্ট্য বিবেচনা করবেন? এটি ক্লাসের ক্ষেত্রের মতো ঠিক বৈশ্বিক নয়।
জেমস টি।

তারপরে পদচারনা property... সম্ভবত এটি আইটেমটি আসলে যা তা নয় তার চেয়ে ভান করার বিষয়টি এটির বিষয়
জোয়েলব

240

ডেভিড গুডার ("কোডটি লাইক অফ পাইথুনিস্টায়" এখানে পিইপি 8 সুপারিশগুলি বর্ণনা করেছেন:

  • joined_lower ফাংশন, পদ্ধতি, বৈশিষ্ট্য, ভেরিয়েবলের জন্য

  • joined_lowerবা ALL_CAPSধ্রুবকদের জন্য

  • StudlyCaps ক্লাসের জন্য

  • camelCase শুধুমাত্র পূর্ব-বিদ্যমান কনভেনশন অনুসারে


3
+1 চাক্ষুষ উদাহরণ। যদিও আমি দেখতে পাইনি যেখানে PEP8 প্রস্তাব দেওয়া joined_lowerজন্য ধ্রুবক "আন্ডারস্কোর শব্দ পৃথক সঙ্গে সব বড় হাতের অক্ষরে", শুধুমাত্র। নতুন এনাম বৈশিষ্ট্যটি সম্পর্কেও কৌতূহল ।
বব স্টেইন

1
StudlyCaps for classesপ্রায় সকল ভাষায় ক্লাসের জন্য একটি সর্বজনীন নিয়ম। তাহলে কিছু অজগর কেন অন্তর্নির্মিত ক্লাস হয় (যেমন datetime.datetimeএই সম্মেলনটি অনুসরণ করে না?
প্রহ্লাদ ইয়েরি

3
@ প্রহ্লাদইয়েরি: দুর্ভাগ্যক্রমে, unittest.TestCase.assertEqualএবং বন্ধুরা স্ন্প কেস কনভেনশনটিও অনুসরণ করে না। সত্যটি হ'ল পাইথন স্ট্যান্ডার্ড লাইব্রেরির অংশগুলি সম্মেলনগুলি দৃ solid় হওয়ার আগে তৈরি করা হয়েছিল এবং আমরা এখন তাদের সাথে আটকে আছি।
wchargin

3
ক্যামেলকেস বিভ্রান্ত করছে কারণ কিছু লোক বলে এটি "উটকেস" (এটি "মিশ্র কেস" নামেও পরিচিত) এবং কিছু লোক বলে এটি "ক্যামেলকেস" ("স্টুডলি ক্যাপস" নামেও পরিচিত)। উদাহরণস্বরূপ, পিইপি "ক্যামেলকেস" উল্লেখ করেছেন যখন আপনি "উটকেস" উল্লেখ করেছেন।
প্রো কি

আপনার এখানে লিঙ্কটি মারা গেছে, সম্ভবত এটি ডেভিড.goodger.org/projects/pycon/2007/idiomat- এর
ওল্ফ

42

পাইথন কোডের স্টাইল গাইড যেমন স্বীকার করে,

পাইথনের লাইব্রেরির নামকরণের কনভেনশনগুলি কিছুটা গণ্ডগোল হয়ে যায়, তাই আমরা কখনই এটি সম্পূর্ণরূপে সুসংগত করব না

দ্রষ্টব্য যে এটি কেবল পাইথনের মানক গ্রন্থাগারকে বোঝায় । যদি তারা এই ধারাবাহিকতা না পেতে পারে তবে সমস্ত পাইথন কোডের জন্য সাধারণত মেনে চলা কনভেনশন হওয়ার খুব কমই আশা আছে, আছে কি?

যে থেকে, এবং আলোচনা এখানে, আমি অনুমান যে এটা না একটি ভয়ঙ্কর পাপ যদি একটি ব্যবহার রাখে যেমন জাভার বা C # 'গুলি (স্পষ্ট এবং সুপ্রতিষ্ঠিত) ভেরিয়েবল এবং ফাংশন জন্য নিয়মাবলী নামকরণ যখন পাইথন উপর উত্তরণ। অবশ্যই মনে রাখা, একটি কোডবেস / প্রকল্প / দলের জন্য প্রচলিত স্টাইলটি যাই হোক না কেন তা মেনে চলা ভাল। পাইথন স্টাইল গাইড যেমন উল্লেখ করেছেন, অভ্যন্তরীণ ধারাবাহিকতা সবচেয়ে গুরুত্বপূর্ণ।

আমাকে ধর্মবিরোধী হিসাবে বরখাস্ত করুন :-) ওপির মতো, আমি কোনও "পাইথনিস্টা" নই, এখনও যাইনি।


32

নেই PEP 8 , যেমন অন্যান্য উত্তর প্রদর্শিত হবে, কিন্তু PEP 8 মান গ্রন্থাগার শুধু styleguide, এবং এটা শুধুমাত্র গসপেল তাতে হিসাবে গ্রহণ করেছে। অন্যান্য টুকরা কোডের জন্য পিইপি 8 এর সর্বাধিক ঘন বিচ্যুতিগুলির মধ্যে একটি হল বিশেষত পদ্ধতিগুলির জন্য পরিবর্তনশীল নামকরণ। কোনও একক প্রাধান্য শৈলী নেই, যদিও মিশ্রকেস ব্যবহার করে এমন কোডের পরিমাণ বিবেচনা করে যদি কেউ কঠোর আদমশুমারির ব্যবস্থা করে থাকে তবে সম্ভবত মিক্সড কেস সহ পিইপি 8 এর সংস্করণটি শেষ হবে। পিইপি 8 থেকে অন্য কিছু বিচ্যুতি রয়েছে যা বেশ সাধারণ।


9
এটির উত্তর দেওয়া হলেও '08-এ এটি সত্য হতে পারে, তবে আজকাল প্রায় সমস্ত বড় লাইব্রেরি পিইপি 8 নামকরণ কনভেনশন ব্যবহার করে।
থান ব্রিমহল

28

উল্লিখিত হিসাবে, পিইপি 8 lower_case_with_underscoresভেরিয়েবল, পদ্ধতি এবং ফাংশনগুলির জন্য ব্যবহার করতে বলে ।

আমি lower_case_with_underscoresভেরিয়েবল এবং mixedCaseপদ্ধতি এবং ফাংশনগুলির জন্য ব্যবহারকে পছন্দ করি কোডটি আরও স্পষ্ট এবং পঠনযোগ্য করে তোলে। সুতরাং পাইথনের জেনের অনুসরণ করা "স্পষ্টকৃতের চেয়ে ভাল ভাল" এবং "পঠনযোগ্যতা গণনা"


3
+1 আমি এই দুটি স্যুইচ করি (আমি ভেরিয়েবলগুলির জন্য মিক্সডকেস ব্যবহার করি), তবে এর মতো আরও সবকিছু স্বতঃস্ফূর্তভাবে হওয়া আপনার তাত্ক্ষণিকতার সাথে তা স্পষ্ট করে তুলতে সহায়তা করে, বিশেষত যেহেতু আপনি কার্য সম্পাদন করতে পারেন।
জিয়াং চিয়ামিওভ

2
যদিও "পঠনযোগ্যতা" অত্যন্ত সাবজেক্টিভ। আমি আরও পঠনযোগ্য আন্ডারস্কোর সহ পদ্ধতিগুলি পাই।
পিথিকোস

আপনার অগ্রাধিকারটি আমার প্রাথমিক অন্তর্নিহিততা ছিল জাভা বিকাশের অনেকগুলি বছর থেকে আসা। আমি ভেরিয়েবলের জন্য _ ব্যবহার করতে পছন্দ করি তবে চোখের দিক থেকে, ফাংশন এবং পদ্ধতিগুলির জন্য এটি আমার কাছে কিছুটা মজার লাগে।
মাইকেল জাজেপানিয়াক

21

@ জন্টেস্ল্যাড উত্তর দিয়েছেন এর আরও উত্তর। গুগলের অজগর স্টাইল গাইডের বেশ কয়েকটি সুন্দর ঝরঝরে সুপারিশ রয়েছে,

নাম এড়িয়ে চলা

  • কাউন্টার বা পুনরুক্তি ব্যতীত একক অক্ষরের নাম
  • যেকোন প্যাকেজ / মডিউল নামে ড্যাশ (-)
  • \__double_leading_and_trailing_underscore__ names (পাইথন দ্বারা সংরক্ষিত)

নামকরণ কনভেনশন

  • "অভ্যন্তরীণ" অর্থ মডিউলটির অভ্যন্তরীণ বা শ্রেণীর মধ্যে সুরক্ষিত বা ব্যক্তিগত।
  • একটি একক আন্ডারস্কোর প্রস্তুতির (_) মডিউল ভেরিয়েবল এবং ফাংশনগুলি (আমদানি * এর সাথে অন্তর্ভুক্ত নয়) রক্ষা করার জন্য কিছু সমর্থন রয়েছে। একটি উদাহরণ ভেরিয়েবল বা পদ্ধতিতে একটি ডাবল আন্ডারস্কোর (__) প্রস্তুত করা কার্যকরভাবে ভেরিয়েবল বা পদ্ধতিটিকে তার শ্রেণীর জন্য ব্যক্তিগতভাবে তৈরি করে (নাম ম্যাঙ্গেলিং ব্যবহার করে)।
  • মডিউলে সম্পর্কিত ক্লাস এবং শীর্ষ-স্তরের ফাংশন একসাথে রাখুন। জাভা থেকে ভিন্ন, মডিউল প্রতি নিজেকে এক শ্রেণিতে সীমাবদ্ধ করার প্রয়োজন নেই।
  • CapWordsশ্রেণীর নামের জন্য, তবে lower_with_under.pyমডিউল নামের জন্য ব্যবহার করুন । যদিও এখানে অনেকগুলি বিদ্যমান মডিউল নামকরণ করা হয়েছে CapWords.py, এটি এখন নিরুৎসাহিত করা হয়েছে কারণ মডিউলটি কোনও শ্রেণীর নামকরণের পরে ঘটলে তা বিভ্রান্তিকর হয়। ("অপেক্ষা করুন - আমি কি লিখলাম import StringIOনাকি from StringIO import StringIO?")

গাইডোর প্রস্তাবনা থেকে প্রাপ্ত নির্দেশিকা এখানে চিত্র বর্ণনা লিখুন


17

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

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


10
আমি একটি জাভা ব্যাকগ্রাউন্ড থেকে আসছি, এবং আমি কেবল উত্তরোত্তর সহ ভারবোস এবং অপ্রচলিত আন্ডারস্কোরগুলি পাই। নামকরণ কিছুটা ক্ষেত্রে পঠনযোগ্যতা এবং সংকীর্ণতার মধ্যে একটি ভারসাম্য। ইউনিক্স খুব বেশি দূরে চলে যায় তবে এর এন.ইউইকিপিডিয়া.রোগ / উইকি / ডোমেন-স্পেসিফিক_ ভাষাটি সীমাবদ্ধ। টুপিগুলির কারণে ক্যামেলকেস পাঠযোগ্য, তবে অতিরিক্ত অক্ষর নেই। 2 সি
ম্যাথু কর্নেল

2
আমার জন্য আন্ডারস্কোরগুলি ফাংশন / পদ্ধতিতে আকর্ষণীয় কারণ আমি প্রতিটি আন্ডারস্কোরকে ভার্চুয়াল (আমার মাথার) নেমস্পেসের জন্য পৃথককারী হিসাবে দেখি। এই ভাবে আমি সহজে কিভাবে আমার নতুন ফাংশন / পদ্ধতি নাম জানতে পারি: make_xpath_predicate, make_xpath_expr, make_html_header,make_html_footer
Pithikos

3
আপনি সাধারণত কল করেন না SomeClass.doSomething()(স্থির পদ্ধতিগুলি সাধারণত বিরল) আপনি সাধারণত কল করেনan_instance.do_something()
ডেভ

15

ব্যক্তিগতভাবে আমি ক্লাস, মিশ্রকেস পদ্ধতি এবং ফাংশনগুলির জন্য ক্যামেলকেস ব্যবহার করার চেষ্টা করি। চলকগুলি সাধারণত আন্ডারস্কোর দ্বারা পৃথক করা হয় (যখন আমি মনে করতে পারি)। এইভাবে আমি এক নজরে বলতে পারি যে ঠিক কীভাবে ডাকছি, তার চেয়ে সমস্ত কিছু একই দেখাচ্ছে।


15
"উট কেস" এর মতো একটি ছোট হাতের আইআইআরসি দিয়ে উটের মামলা শুরু হয়।
UnkwnTech

11
আমি মনে করি ক্রিস্টাল্যাটাইসিসের এটি সঠিক ছিল - কমপক্ষে, তার ব্যবহার পিইপি 8 (ক্যামেলকেস এবং মিশ্র কেস) এর ব্যবহারের সাথে সামঞ্জস্যপূর্ণ।
জেরেট

1
@ উঙ্কউনটেক প্রথম শব্দটির জন্য শব্দটিকে কখনও কখনও পাস্কেলকেস বলা হয়
সারপ্রাইজডগ

উট কেস না উট কেস? ভাবছি.
সুমিত পোখরেল

11

এটি সম্পর্কে একটি কাগজ রয়েছে: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010- ক্যামেলকেসউন্ডারস্কোরক্লাউডস.পিডিএফ

টিএল; ডিআর এটি বলে যে স্যাম_কেস উট কেসের চেয়ে বেশি পঠনযোগ্য। এ কারণেই আধুনিক ভাষাগুলি যেখানেই পারে সাপ ব্যবহার করে (বা ব্যবহার করা উচিত)।


9
মজার বিষয় হল, এটি আরও বলেছে, "এই অধ্যয়নের ফলাফলগুলি সোর্স কোডে এম্বেড করা শনাক্তকারীদের জন্য অগত্যা প্রযোজ্য না programming পুরোপুরিই সম্ভব যে প্রোগ্রামিং কনস্ট্রাক্টসের অভ্যন্তরে এম্বেড থাকা অবস্থায় উটের কেস সনাক্তকারীরা আরও ভাল জিস্টাল্ট উপাদান হিসাবে কাজ করতে পারে।"
rob3c

2

কোডিং স্টাইলটি সাধারণত কোনও সংস্থার অভ্যন্তরীণ নীতি / কনভেনশন মানগুলির অংশ, তবে আমি সাধারণভাবে মনে করি, অল-ব্লোয়ার_কেস_উন্ডস্কোর_সেপারেটর স্টাইল (যা সাপ_কেস নামেও পরিচিত) অজগরটিতে সবচেয়ে বেশি দেখা যায়।


0

অন্যান্য প্রোগ্রামিং ভাষাগুলিতে বিকাশ করার সময় আমি ব্যক্তিগতভাবে জাভার নামকরণের কনভেনশনগুলি ব্যবহার করি কারণ এটি নিয়মিত এবং অনুসরণ করা সহজ। সেভাবে আমি কোন কনভেনশন ব্যবহার করব যা আমার প্রকল্পের সবচেয়ে কঠিন অংশ হওয়া উচিত তা নিয়ে আমি ক্রমাগত লড়াই করছি না!


আমি কিছুটা রাজি। ভাষা এক্স যদি প্রকল্পের কেবলমাত্র একটি অল্প পরিমাণ হয় তবে কীভাবে পাঠ্যকে ফর্ম্যাট করতে হবে তার প্রসঙ্গের স্যুইচ বোঝা হতে পারে। প্রধান হিচাপ হ'ল লাইব্রেরিতে এক স্টাইলে কল থাকবে ( library_function(my_arg))।
ল্যান

-2

সাধারণত, কেউ ভাষার স্ট্যান্ডার্ড লাইব্রেরিতে ব্যবহৃত সম্মেলনগুলি অনুসরণ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.