2014-11-08 12 views
5

मैं एक पायथन मॉड्यूल लिख रहा हूं जिसका उद्देश्य एक डेटा संरचना निर्यात करना है। मेरा मानना ​​है कि इसका मतलब है कि मेरे मॉड्यूल को एक ही प्रतीक (उदा। foo) निर्यात करना चाहिए, इसके सभी अन्य प्रतीक अंडरस्कोर-प्रीफिक्स्ड हैं।निर्यात किए गए प्रतीकों को सीमित करने के लिए पाइथन मॉड्यूल को कैसे व्यवस्थित किया जाए?

डेटा संरचना उत्पन्न करना उचित मात्रा में कोड लेता है - इस मॉड्यूल को बिना किसी उपसर्ग के निर्यात किए जाने के लिए मॉड्यूल को कैसे बनाए रखना चाहिए? दो संभव तरीके हैं:

  1. शीर्ष-स्तर पर पीढ़ी कोड रखो, उपयोग करने के लिए सावधान किया जा रहा वाले अंडरस्कोर भर में, उदाहरण के लिए:

    _bar = ... 
    for _i in ...: 
        _bar.append(...) 
    
    foo = [_bar, ...] 
    
  2. एक समारोह जो डेटा रिटर्न के भीतर पीढ़ी कोड रखो संरचना। अंडरस्कोर का उपयोग करने के लिए केवल फ़ंक्शन नाम की आवश्यकता होती है। उदाहरण के लिए:

    def _generate_foo(): 
        bar = ... 
        for i in ...: 
         bar.append(...) 
        return [bar, ...] 
    
    foo = _generate_foo() 
    

इन तरीकों बेहतर माना के दोनों है? या, क्या इस मॉड्यूल को बनाने के लिए एक और तरीका है जिसे प्राथमिकता दी जाएगी?

+2

मुझे दूसरा पढ़ने में आसान लगता है, हालांकि आप उनमें से किसी एक का उपयोग कर सकते हैं, लेकिन केवल सुसंगत रहें। –

उत्तर

0

मैं एक दृढ़ रखरखाव परिप्रेक्ष्य से फ़ंक्शन परिभाषा दृष्टिकोण पसंद करता हूं।

यह भी याद रखना महत्वपूर्ण है कि हम सभी वयस्कों की सहमति दे रहे हैं और यह आपके मॉड्यूल का उपयोग उनके उपयोग के लिए सबसे उपयुक्त तरीके से करने की ज़िम्मेदारी है।

अंडरस्कोर तथापि (documented के रूप में) PEP-8 द्वारा समर्थित है और इसलिए किसी भी _symbols कि अंडरस्कोर का उपयोग कर केवल से वह नाम from module import * साथ आयात किया जा रहा द्वारा एक import *

11

नोट आयात नहीं किया जाएगा का उपयोग। यह किसी भी वास्तविक तरीके से नाम "निजी" नहीं बनाता है। लोग import module और फिर module._hiddenStuff करके अपने मॉड्यूल में सबकुछ देख सकते हैं।

अपने मामले के लिए, आपको इसके बजाय __all__ का उपयोग करना चाहिए। कोड हो आप जो कुछ भी करना चाहते हैं, लेकिन मॉड्यूल के शीर्ष पर कार्य करें:

__all__ = ['foo'] # foo being the one thing you do want to export 

यह अंडरस्कोर का उपयोग कर जैसा ही होता है, लेकिन जब आप सबसे अधिक चीजों को बाहर करने के बजाय उन्हें शामिल चाहते हैं बेहतर है।

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

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