2011-11-22 11 views
8

संभव डुप्लिकेट:
What does <if name==“main”:> do?पायथन में 'if name == "__main __" का अर्थ क्या है?

मैं स्क्रिप्ट पायथन में काफी देर के लिए अब लिखा है और मैं अजगर के और अधिक अध्ययन के रूप में मैं इसकी आवश्यकता है। अन्य लोगों के कोड को पढ़ने पर मैं if name == "__main__": अक्सर मिलती हूं।

इसके लिए क्या अच्छा है?

+1

ओह, मैं देख रहा हूँ ... 'अगर __name __ =" __ मुख्य __ ":' चेकों सूख स्क्रिप्ट एक स्टैंडअलोन या एक मॉड्यूल है। – Adobe

+1

कॉपी-पेस्टर्स और/या भ्रम से बचने के लिए, पूर्व टिप्पणी में टाइपो से अवगत रहें: 'if __name __ ==" __ मुख्य __ ":' – alberto

उत्तर

20

यह आपको लाइब्रेरी (इसे आयात करके) या किसी एप्लिकेशन के प्रारंभिक बिंदु के रूप में एक ही फ़ाइल का उपयोग करने की अनुमति देता है।

# hello.py 
def hello(to=__name__): 
    return "hello, %s" % to 

if __name__ == "__main__": 
    print hello("world") 

आप दो तरह से है कि कोड का उपयोग कर सकते हैं:

उदाहरण के लिए, निम्न फ़ाइल पर विचार करें। एक के लिए, आप एक प्रोग्राम लिख सकते हैं जो इसे आयात करता है। आप पुस्तकालय आयात करते हैं, __name__ पुस्तकालय का नाम होगा और इस तरह की जांच विफल हो जाएगा, और कोड निष्पादित नहीं होगा (जो वांछित व्यवहार है):

#program.py 
from hello import hello # this won't cause anything to print 
print hello("world") 

आप लिखने के लिए नहीं करना चाहते हैं

$ python hello.py 
hello, __main__ 

यह व्यवहार सभी विशेष चर __name__ जो अजगर कि क्या पुस्तकालय आयातित या द्वारा सीधे चलाया जाता है के आधार पर सेट हो जाएगा पर निर्भर करता है: यह दूसरी फ़ाइल, आप सीधे की तरह कुछ के साथ कमांड लाइन से अपने कोड चला सकते हैं दुभाषिया। यदि सीधे चलाया जाता है तो इसे __main__ पर सेट किया जाएगा। अगर आयात किया गया तो इसे लाइब्रेरी नाम पर सेट किया जाएगा (इस मामले में, hello)।

अक्सर यह निर्माण आपके कोड में यूनिट परीक्षण जोड़ने के लिए उपयोग किया जाता है। इस तरह, जब आप एक लाइब्रेरी लिखते हैं तो आप बिना किसी चिंता के फ़ाइल में परीक्षण कोड एम्बेड कर सकते हैं कि जब लाइब्रेरी सामान्य तरीके से उपयोग की जाती है तो इसे निष्पादित किया जाएगा। जब आप लाइब्रेरी का परीक्षण करना चाहते हैं, तो आपको किसी भी ढांचे की आवश्यकता नहीं है क्योंकि आप लाइब्रेरी को चला सकते हैं जैसे कि यह एक प्रोग्राम था।

भी देखें __main__ in the python documentation (हालांकि यह उल्लेखनीय विरल है)

3

असल में,

वहाँ "मुख्य" स्क्रिप्ट फ़ाइल और बाह्य फ़ाइलों जो आयातित या किसी अन्य तरीके से संदर्भित कर रहे थे के बीच एक अंतर है। यदि स्क्रिप्ट "मुख्य" स्क्रिप्ट है तो विशेष चर __name__"__main__" के बराबर होगा।

आप कक्षाओं से "निष्पादन" कोड और स्क्रिप्ट के चर से बचाने के लिए इसका उपयोग कर सकते हैं। यह आपको स्क्रिप्ट आयात करने में सक्षम बनाता है और वास्तव में उस स्क्रिप्ट के मुख्य कोड को चलाने के बिना कक्षाओं और चर का उपयोग करता है यदि उसके पास कोई है।

+0

बोनस-ट्रिविया: यदि आप मॉड्यूल आयात करते हैं तो आपको __name__ में क्या मिलता है "__main__" नाम दिया जाता है? – Agrajag

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