2010-06-08 12 views

उत्तर

34

एक स्क्रिप्ट आमतौर पर कोड का सीधे निष्पादन योग्य टुकड़ा होता है, जो स्वयं ही चलता है। एक मॉड्यूल आमतौर पर एक पुस्तकालय है, जो कोड के अन्य टुकड़ों द्वारा आयात किया जाता है।

ध्यान दें कि कोई आंतरिक भेद नहीं है - दोनों निष्पादन योग्य और आयात योग्य हैं, हालांकि पुस्तकालय कोड अक्सर कुछ भी नहीं करेगा (या केवल यूनिट परीक्षण चलाएगा) जब सीधे निष्पादित किया जाता है और स्क्रिप्ट के लिए डिज़ाइन किए गए कोड को आयात करने का कारण बनता है निष्पादित करने के लिए, इसलिए आम if __name__ == "__main__" परीक्षण।

+2

+1: "कोई आंतरिक भेद नहीं"। यह सिर्फ आप इसका उपयोग कैसे करते हैं। –

+2

हाँ। साथ ही, जब तक हम भेदभाव की बात कर रहे हैं, मैं इसे एक कार्यक्रम (एक स्क्रिप्ट नहीं) कहूंगा जब तक कि इसका प्राथमिक उपयोग अन्य कार्यक्रमों के कार्यों को स्क्रिप्ट नहीं करना था। –

10

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

यह भेद if __name__=="__main__" द्वारा संरक्षित ब्लॉक में स्क्रिप्ट विशिष्ट कोड को संलग्न करके आयात करते समय अलग-अलग व्यवहार करना संभव बनाता है। यह भ्रम पैदा करने के लिए जाना जाता है जब कोई उपयोगकर्ता __main__ आयात करने के बजाय अपने नाम के तहत मुख्य मॉड्यूल आयात करने का प्रयास करता है।

स्क्रिप्ट और मॉड्यूल के बीच एक मामूली अंतर यह है कि जब आप मॉड्यूल आयात करते हैं तो सिस्टम मौजूदा .pyc फ़ाइल का उपयोग करने का प्रयास करेगा (बशर्ते यह मौजूद है और अद्यतित है और पायथन के उस संस्करण के लिए) और यदि इसे करना है एक .py फ़ाइल से संकलित करें, यह एक .pyc फ़ाइल को सहेजने का प्रयास करेगा। जब आप एक .py फ़ाइल को स्क्रिप्ट के रूप में चलाते हैं तो यह पहले संकलित मॉड्यूल को लोड करने का प्रयास नहीं करता है, और न ही संकलित कोड को सहेजने का प्रयास करेगा। इस कारण से स्टार्टअप समय को कम करने के लिए छोटी स्क्रिप्ट को रखना उचित हो सकता है।

+0

मैं सुझाव देता हूं कि वाक्यांश * को * स्क्रिप्ट * के रूप में निष्पादित * बस * निष्पादित * द्वारा * * स्क्रिप्ट * द्वारा * प्रोग्राम * की शेष घटनाओं को [ʇsәɹoɈ] की टिप्पणी [https://stackoverflow.com/ प्रश्न/2996110/क्या-है-अंतर-बीच एक मॉड्यूल और एक स्क्रिप्ट में अजगर # comment3060238_2996170) – Wolf

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