सबसे पहले आपको पता होना चाहिए कि पायथन भाषा आईएसओ मानक नहीं है। यह सी/सी ++ से अलग है, और इसका मतलब है कि भाषा व्यवहार को परिभाषित करने के लिए कोई "उचित" तरीका नहीं है - सीपीथन कुछ ऐसा कर सकता है क्योंकि इसे इस तरह से कोड किया गया था, और ज्योथन दूसरे तरीके से हो सकता है।
अपने प्रश्नों के बारे में, याद रखें कि एक मॉड्यूल "आयात" एक दो भाग का ऑपरेशन है: पहला मॉड्यूल लोड होता है - अगर यह कभी नहीं होता, उदा। यदि यह sys.modules में उपलब्ध नहीं था, तो स्थानीय नामस्थान में उस मॉड्यूल के लिए एक नाम बाध्य है।
इसलिए
:
1) हाँ, आप उचित नाम स्थान है, उदा प्रदान करके संदर्भित कर सकते हैं जो कुछ भी आप मॉड्यूल एक से चाहते हैं आप = "कुछ"
तरह
BCname कुछ करना होगा और मुझे लगता है यह बहुत मुश्किल से ही अजगर कार्यक्रमों में किया जाता है और बुरा व्यवहार माना जा सकता है क्योंकि यह बलों एक "सकर्मक डीईपी" - कुछ करता है, तो मॉड्यूल बी कार्यान्वयन को फिर से संसाधित किया जाता है और अब सी पर निर्भर नहीं होता है, इसे केवल एक डीपीएस को संतुष्ट करने के लिए सी मॉड्यूल की पेशकश जारी रखना चाहिए।
बेशक सेटिंग __ सभी __ इसे रोक सकते हैं, और एक अच्छा अभ्यास आपके सभी मॉड्यूल में __ सभी __ डालने के लिए हो सकता है, और केवल निर्यात करें जो आप वास्तव में सार्वजनिक होना चाहते हैं।
2) हां और नहीं। कर
import a.b.c.d
सभी मॉड्यूल पर पहले आयात चरण (लोड हो रहा है) का इस्तेमाल करता है, लेकिन सिर्फ एक (और, रिकर्सिवली, ग के संबंध में, आदि के साथ ख में), लेकिन श्रृंखला में सभी मॉड्यूल चाहिए पर दूसरा पूर्ण नामस्थान द्वारा संदर्भित किया जाना चाहिए; इस तरह के एक आयात के बाद, आप
a.something
a.b.something
a.b.c.something
कर सकते हैं, लेकिन आप ऐसा नहीं कर सकते
c.something
b.something
मैं मानता चाहिए उपयोग के उस तरह के रूप में अच्छी तरह सुंदर दुर्लभ है; मैं आम तौर पर "मॉड्यूल आयात से कुछ" आयात करने के लिए पसंद करता हूं, और आम तौर पर आप केवल जो चाहते हैं उसके लिए पूछते हैं - ऐसे घोंसले पुस्तकालयों में न तो आम हैं, न ही इसका उपयोग आम है।
कई बार "बाहरी पैकेज" होते हैं, जो संगठन के लिए उपयोग किए जाते हैं, जो कक्षाओं के साथ मॉड्यूल रखते हैं। यह बहुत संभावना है कि उपरोक्त ए, बी, सी केवल पैकेज हैं, और डी एक मॉड्यूल है जो वास्तव में कक्षाओं, कार्यों और अन्य वस्तुओं को रखता है।तो उचित उपयोग होगा:
from a.b.c.d import name1, name2, name3
मुझे आशा है कि यह आपकी जिज्ञासा को पूरा करेगा।
"भाषा परिभाषित और कार्यान्वयन-विशिष्ट नहीं" क्या आप कह रहे हैं कि पाइथन कार्यान्वयन किसी भी तरह से अलग हैं? आप किस विशिष्ट अंतर के बारे में जानते हैं? AFAIK कोई नहीं हैं। –
शायद कोई अंतर नहीं है, लेकिन कल्पना द्वारा परिभाषित कुछ भी कार्यान्वयन तक नहीं है। पाइथन डॉक्स को सीपीथॉन कार्यान्वयन विवरण के बारे में चेतावनी के साथ भरे हुए हैं जो अन्य कार्यान्वयन में लागू नहीं हो सकते हैं। –