जब पायथन इंटरप्रेटर किसी स्रोत फ़ाइल को पढ़ता है, तो वह उसमें पाए गए सभी कोड को निष्पादित करता है।
कोड निष्पादित करने से पहले, यह कुछ विशेष चर परिभाषित करेगा। उदाहरण के लिए, यदि पाइथन दुभाषिया उस मॉड्यूल (स्रोत फ़ाइल) को मुख्य प्रोग्राम के रूप में चला रहा है, तो यह "__main__" मान रखने के लिए विशेष __name__ चर सेट करता है। यदि यह फ़ाइल किसी अन्य मॉड्यूल से आयात की जा रही है, तो __name__ मॉड्यूल के नाम पर सेट हो जाएगी।
ऐसा करने का एक कारण यह है कि कभी-कभी आप एक मॉड्यूल (एक .py फ़ाइल) लिखते हैं जहां इसे सीधे निष्पादित किया जा सकता है। वैकल्पिक रूप से, इसे आयात किया जा सकता है और दूसरे मॉड्यूल में उपयोग किया जा सकता है। मुख्य जांच करके, आप उस कोड को केवल तभी निष्पादित कर सकते हैं जब आप मॉड्यूल को प्रोग्राम के रूप में चलाना चाहते हैं और इसे निष्पादित नहीं करना चाहते हैं जब कोई आपके मॉड्यूल को आयात करना चाहता है और अपने कार्यों को स्वयं कॉल करना चाहता है।
उदाहरण के लिए, यदि आपके पास निम्न कोड वाली 2 फ़ाइलें one.py और Two.py हैं:
one.py:
def func(): print("func() in one.py") print("Root of one.py") if __name__ == "__main__": print("one.py is being run directly") else: print("one.py is being imported")
Two.py:
import one print("Root of two.py") one.func() if __name__ == "__main__": print("two.py is being run directly") else: print("two.py is being imported")
अब अगर आप दौड़ते हैं,
$ python one.py
आपको आउटपुट मिलेगा:
Root of one.py one.py is being run directly
लेकिन अगर आप दौड़ते हैं,
$ python two.py
आपको आउटपुट मिलेगा:
Root of in one.py one.py is being imported Root of in two.py func() in one.py two.py is being run directly