Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में टॉप-लेवल स्क्रिप्ट एनवायरनमेंट (__main__)

एक मॉड्यूल ऑब्जेक्ट विभिन्न एट्रिब्यूट्स द्वारा विशेषता होता है। एट्रिब्यूट नाम डबल अंडरस्कोर __ से प्रीफिक्स और पोस्टफिक्स होते हैं। मॉड्यूल का सबसे महत्वपूर्ण एट्रिब्यूट __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

फ़ंक्शन वाला एक पायथन स्क्रिप्ट कुछ एक्ज़ीक्यूटेबल कोड भी रख सकता है। इसलिए यदि हम इसे इम्पोर्ट करते हैं तो इसका कोड स्वचालित रूप से चलेगा। हमारे पास messages.py नामक यह स्क्रिप्ट है जिसमें दो फ़ंक्शन्स हैं। एक्ज़ीक्यूटेबल पार्ट में यूजर इनपुट को thanks() फ़ंक्शन के तर्क के रूप में प्रदान किया जाता है।

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)

स्पष्ट रूप से जब हम messages.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__)

अब यदि हम moduletest.py स्क्रिप्ट चलाते हैं, तो हम पाएंगे कि इनपुट स्टेटमेंट और welcome() कॉल एक्ज़ीक्यूट होगा।

c:\python37>python moduletest.py

आउटपुट

enter name:Kishan
Thank you Kishan. See you again
enter name:milind
Hi milind. Welcome to TutorialsPoint

यह दोनों स्क्रिप्ट्स का आउटपुट है। लेकिन हम messages मॉड्यूल से फ़ंक्शन इम्पोर्ट करना चाहते हैं लेकिन इसमें एक्ज़ीक्यूटेबल कोड नहीं।

यह वह जगह है जहां टॉप-लेवल स्क्रिप्ट के __name__ एट्रिब्यूट का मान __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)

जब भी आप एक मॉड्यूल चाहते हैं जिसे एक्ज़ीक्यूट और इम्पोर्ट दोनों किया जा सके, तो उपरोक्त तकनीक का उपयोग करें। moduletest.py को किसी बदलाव की आवश्यकता नहीं है। messages मॉड्यूल में एक्ज़ीक्यूटेबल पार्ट अब नहीं चलेगा।

enter name: milind
Hi milind. Welcome to TutorialsPoint

ध्यान दें कि यह आपको messages.py स्क्रिप्ट को स्वतंत्र रूप से चलाने से नहीं रोकता।

  1. Python वर्चुअल एनवायरनमेंट Python वर्चुअल एनवायरनमेंट

    परिचय डेवलपर्स अक्सर Python प्रोजेक्ट से निपटते हैं जहां उन्हें मॉड्यूल और पैकेज का उपयोग करना पड़ता है जो Python मानक लाइब्रेरी का हिस्सा नहीं थे और उन्हें केवल इस विशेष एप्लिकेशन के लिए चाहिए। एक मामले पर विचार करें, जहां आपने Python का वर्तमान संस्करण इंस्टॉल किया है (मान लें कि यह python-3.6 है

  1. - पायथन में टॉप-लेवल स्क्रिप्ट एनवायरनमेंट (__main__)

    एक मॉड्यूल ऑब्जेक्ट विभिन्न एट्रिब्यूट्स द्वारा विशेषता होता है। एट्रिब्यूट नाम डबल अंडरस्कोर __ से प्रीफिक्स और पोस्टफिक्स होते हैं। मॉड्यूल का सबसे महत्वपूर्ण एट्रिब्यूट __name__ है। जब पायथन टॉप-लेवल एक्ज़ीक्यूटेबल कोड के रूप में चल रहा होता है, यानी जब स्टैंडर्ड इनपुट से, एक स्क्रिप्ट से, या इंट

  1. पायथन getpass मॉड्यूल पायथन getpass मॉड्यूल

    पायथन की स्टैंडर्ड लाइब्रेरी के getpass मॉड्यूल में दो फ़ंक्शन्स परिभाषित हैं। वे तब उपयोगी होते हैं जब भी टर्मिनल-आधारित एप्लिकेशन को यूजर क्रेडेंशियल्स मान्य करने के बाद ही एक्ज़ीक्यूट करने की आवश्यकता होती है। getpass() यह फ़ंक्शन यूजर को पासवर्ड दर्ज करने के लिए प्रेरित करता है। डिफ़ॉल्ट रूप से