2010-05-17 13 views
45

है, मैं इसमें एक .py स्रोत फ़ाइल के साथ एक वास्तव में सरल मॉड्यूल को एक साथ रखने की कोशिश कर रहा हूं, और पहले ही रोडब्लॉक में चला चुका हूं। मैं इसे scons-config पर कॉल करने जा रहा था लेकिन import scons-config पायथन में काम नहीं करता है। मुझे this SO question मिला और PEP8 style guide पर देखा लेकिन मैं परेशान हूं, यह दो शब्द-नाम सम्मेलनों के बारे में बात नहीं करता है।पायथन: एक मॉड्यूल नामकरण जिसमें दो शब्द का नाम

इससे निपटने का सही तरीका क्या है?

  • मॉड्यूल का नाम: SconsConfig? scons_config? sconsconfig? scons.config?
  • इसमें एकल .py फ़ाइल का नाम: scons-config.py? scons_config.py?

संपादित करें: मैं देखा था "अंडरस्कोर के प्रयोग को प्रोत्साहित कर रहा है" और है कि मुझे एक मरे हुए अंत में छोड़ दिया: मैं "sconsconfig" या "scons_config" (मुझे लगता है कि अन्य लोगों को बाहर कर रहे हैं) का उपयोग करना चाहिए?

+1

एक एकल '.py' एक मॉड्यूल है ... –

उत्तर

53

यदि आपको हमेशा अंडरस्कोर _ का उपयोग करना है।

एक डॉट . का उपयोग करना भी काम नहीं होता है, अन्यथा

from scons.config import whatever 

टूट जाएगा।

लेकिन PEP 8 स्पष्ट रूप से यह वर्णन करता है:

पैकेज और मॉड्यूल नाम

मॉड्यूल छोटा है, सभी लोअरकेस नाम होना चाहिए। अंडरस्कोरमॉड्यूल नाम में का उपयोग किया जा सकता है यदि यह पठनीयता में सुधार करता है। पायथन पैकेज में छोटे, सभी-लोअरकेस नाम भी होना चाहिए, हालांकि अंडरस्कोर का उपयोग को हतोत्साहित किया गया है।

अद्यतन:

आपके सवाल का सीधे लक्षित करने के लिए: मुझे लगता है sconsconfig ठीक है। यह बहुत लंबा और काफी पठनीय नहीं है।

लेकिन ईमानदारी से, मुझे नहीं लगता कि अगर आप अंडरस्कोर का उपयोग करते हैं तो कोई आपको दोषी ठहराएगा और आपका कोड किसी भी निर्णय के साथ चलाएगा। हमेशा एक निश्चित स्तर होता है जहां आपको पर परवाह नहीं करना चाहिए।

+3

मैंने देखा "अंडरस्कोर का उपयोग निराश है" और यह मुझे एक मृत अंत में छोड़ दिया। –

+7

@ जेसन एस: ठीक है, अगर इसका उपयोग वास्तव में पीड़ित है या किसी अन्य नाम के बारे में सोचता है, तो इसका उपयोग करें;) यह * केवल * निराश है, वर्जित नहीं है। –

+2

"हमेशा एक निश्चित स्तर होता है जहां आपको अब और अधिक परवाह नहीं करना चाहिए।" सच है लेकिन इस तरह के निर्णयों के लिए लगभग हमेशा परिणाम होते हैं और यदि आप मेरे जैसे शुरुआती हैं तो यह चुनौतीपूर्ण है। धन्यवाद! –

2

- कोई जाना नहीं है। प्रतीक का उपयोग शून्य ऑपरेटर के लिए किया जाता है। अधिकांश प्रोग्रामिंग भाषाओं में भी यही सच है। _ या अन्यथा कुछ भी नहीं उपयोग करें।

11

सबसे पहले, मॉड्यूल नाम एकल .py फ़ाइल के नाम के समान है। पायथन-बोल में, कई .py फाइलों का संग्रह एक पैकेज है।

पीईपी -8 अंडरस्कोर के साथ पैकेज नाम तोड़ने को हतोत्साहित करता है। मेरी साइट-पैकेज निर्देशिका में एक त्वरित चोटी से पता चलता है कि मल्टीवर्ड नाम आमतौर पर एक साथ चलते हैं (ई।जी।, setuptools, sqlalchemy)

मॉड्यूल नाम (यानी, फ़ाइल नाम) अंडरस्कोर द्वारा तोड़ दिया जा सकता है (और मैं आमतौर पर ऐसा करता हूं, क्योंकि मुझे namesthatruntogethersoyoucanhardlyreadthem से नफरत है)।

केवल निम्न-मामले के साथ चिपकें (प्रति पीईपी -8)। केस-सेंसिटिव से केस-असंवेदनशील फाइल सिस्टम और इसके विपरीत होने पर यह समस्या से बचाता है।

4

पीईपी -8 के अलावा, आप यह भी देख सकते हैं कि देशी पायथन मॉड्यूल इस मुद्दे से कैसे निपटते हैं।

यदि आप the native modules of Python 2 से that of Python 3 की तुलना करना चाहते थे, तो आप देखेंगे कि आधिकारिक देवताओं के साथ नई प्रवृत्ति अपरकेस और अंडरस्कोर से बचने के लिए है। उदाहरण के लिए, अजगर 2 में ConfigParser पायथन 3.

में configparser हो जाता है इस को देखते हुए, कार्रवाई का सर्वोत्तम रास्ता अपरकेस और अंडरस्कोर से बचने के लिए, और सिर्फ एक साथ शब्दों में शामिल होने से, यानी sconsconfig होगा।

संबंधित मुद्दे