एक मॉड्यूल ऑब्जेक्ट विभिन्न विशेषताओं द्वारा विशेषता है। विशेषता नाम डबल अंडरस्कोर __ द्वारा प्रीफ़िक्स और पोस्ट-फिक्स्ड हैं। मॉड्यूल की सबसे महत्वपूर्ण विशेषता __name__ है। जब पायथन एक शीर्ष स्तर के निष्पादन योग्य कोड के रूप में चल रहा होता है, अर्थात जब मानक इनपुट, स्क्रिप्ट, या एक इंटरैक्टिव प्रॉम्प्ट से पढ़ा जाता है, तो __name__ विशेषता '__main__ पर सेट हो जाती है। '।
>>> __name__ '__main__'
एक स्क्रिप्ट के भीतर से भी, हम पाते हैं कि __name__ विशेषता का मान '__main__' पर सेट है। निम्न स्क्रिप्ट निष्पादित करें।
'module docstring' print ('name of module:',__name__)
आउटपुट
name of module: __main__
हालांकि, एक आयातित मॉड्यूल के लिए यह विशेषता पायथन लिपि के नाम पर सेट है। hello.py मॉड्यूल के लिए
>>> import hello >>> hello.__name__ hello
जैसा कि पहले देखा गया है, शीर्ष-स्तरीय मॉड्यूल के लिए __name__ का मान __main__ पर सेट है। हालांकि, आयातित मॉड्यूल के लिए यह एक फ़ाइल के नाम पर सेट है। निम्नलिखित स्क्रिप्ट चलाएँ (moduletest.py)
import hello print ('name of top level module:', __name__) print ('name of imported module:', hello.__name__)
आउटपुट
name of top level module: __main__ name of imported module: hello
फ़ंक्शन वाली एक पायथन लिपि में एक निश्चित निष्पादन योग्य कोड भी हो सकता है। इसलिए अगर हम इसे इम्पोर्ट करते हैं तो इसका कोड अपने आप रन हो जाएगा। हमारे पास यह स्क्रिप्ट message.py दो कार्यों के साथ है। निष्पादन योग्य भाग में उपयोगकर्ता इनपुट धन्यवाद () फ़ंक्शन के तर्क के रूप में प्रदान किया जाता है।
def welcome(name): print ("Hi {}. Welcome to TutorialsPoint".format(name)) return def thanks(name): print ("Thank you {}. See you again".format(name)) name = input('enter name:') thanks(name)
जाहिर है जब हम message.py आउटपुट चलाते हैं तो नीचे के रूप में एक धन्यवाद संदेश दिखाता है।
enter name:Ajit Thank you Ajit. See you again
हमारे पास नीचे के रूप में एक moduletest.py स्क्रिप्ट है।
import messages print ('name of top level module:', __name__) print ('name of imported module:', messages.__name__)
अब अगर हम मॉड्यूलटेस्ट.पी स्क्रिप्ट चलाते हैं, तो हम पाएंगे कि इनपुट स्टेटमेंट और कॉल टू वेलकम () को निष्पादित किया जाएगा।
c:\python37>python moduletest.py
आउटपुट
enter name:Kishan Thank you Kishan. See you again enter name:milind Hi milind. Welcome to TutorialsPoint
यह दोनों लिपियों का आउटपुट है। लेकिन संदेश मॉड्यूल से फ़ंक्शन आयात करना चाहते हैं लेकिन इसमें निष्पादन योग्य कोड नहीं।
यह वह जगह है जहां तथ्य यह है कि शीर्ष-स्तरीय स्क्रिप्ट के __name__attribute का मान __main__ उपयोगी है। Messages.py स्क्रिप्ट को इस तरह बदलें कि वह इनपुट और फ़ंक्शन कॉल स्टेटमेंट को तभी निष्पादित करे जब __name__ __main__ के बराबर हो।
"docstring of messages module" def welcome(name): print ("Hi {}. Welcome to TutorialsPoint".format(name)) return def thanks(name): print ("Thank you {}. See you again".format(name)) if __name__=='__main__': name = input('enter name') thanks(name)
उपरोक्त तकनीक का उपयोग करें जब भी आप एक मॉड्यूल चाहते हैं जिसे निष्पादित किया जा सकता है और साथ ही आयात किया जा सकता है। मॉड्यूलटेस्ट को किसी भी बदलाव की आवश्यकता नहीं है। संदेश मॉड्यूल में एक निष्पादन योग्य भाग अब नहीं चलेगा।
enter name: milind Hi milind. Welcome to TutorialsPoint
ध्यान दें कि यह आपको message.py स्क्रिप्ट को स्वतंत्र रूप से चलाने से नहीं रोकता है।