python - क्या मुझे 'आयात os.path` या' आयात os 'का उपयोग करना चाहिए?




3 Answers

os.path एक मजेदार तरीके से काम करता है। ऐसा लगता है कि os एक सबमिशन path साथ एक पैकेज होना चाहिए, लेकिन हकीकत में os एक सामान्य मॉड्यूल है जो sys.modules करने के लिए os.path साथ जादू करता है। यहां क्या होता है:

  • जब पायथन शुरू होता है, तो यह sys.modules में मॉड्यूल का एक गुच्छा लोड करता है। वे आपकी स्क्रिप्ट में किसी भी नाम से बंधे नहीं हैं, लेकिन आप पहले से बनाए गए मॉड्यूल तक पहुंच सकते हैं जब आप उन्हें किसी भी तरह से आयात करते हैं।

    • sys.modules एक ऐसा sys.modules है जिसमें मॉड्यूल कैश किए जाते हैं। जब आप एक मॉड्यूल आयात करते हैं, यदि यह पहले से कहीं आयात किया गया है, तो यह sys.modules में संग्रहीत उदाहरण प्राप्त sys.modules
  • os उन मॉड्यूल में से एक है जो पाइथन शुरू होने पर लोड होते हैं। यह एक ओएस-विशिष्ट पथ मॉड्यूल में अपना path विशेषता निर्दिष्ट करता है।

  • यह sys.modules['os.path'] = path ताकि आप " import os.path " कर import os.path जैसे कि यह एक सबमिशन था।

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

संयोग से, इस तरह की संरचना में पाइथन प्रोग्रामर के मॉड्यूल और पैकेज और कोड संगठन के बारे में बहुत भ्रम पैदा होता है, मुझे लगता है। यह वास्तव में दो कारणों से है

  1. यदि आप पैकेज के रूप में os बारे में सोचते हैं और जानते हैं कि आप import os कर सकते हैं और सबमिशन os.path तक पहुंच सकते हैं, तो आप बाद में आश्चर्यचकित हो सकते हैं जब आप import twisted नहीं कर सकते हैं और इसे आयात किए बिना स्वचालित रूप से import twisted किया जा सकता है। os.path इसे आयात किए बिना।

  2. यह भ्रमित है कि os.path एक सामान्य बात है, एक स्ट्रिंग, और os.path एक मॉड्यूल है। मैं हमेशा अपने पैकेज को खाली __init__.py फाइलों के साथ __init__.py हूं ताकि एक ही स्तर पर मेरे पास हमेशा एक प्रकार की चीज़ हो: एक मॉड्यूल / पैकेज या अन्य सामान। कई बड़ी पायथन परियोजनाएं इस दृष्टिकोण को लेती हैं, जो अधिक संरचित कोड बनाती है।

आधिकारिक दस्तावेज के अनुसार, os.path एक मॉड्यूल है। इस प्रकार, इसे आयात करने का पसंदीदा तरीका क्या है?

# Should I always import it explicitly?
import os.path

या ...

# Is importing os enough?
import os

कृपया "मेरे लिए os आयात आयात" का उत्तर न दें। मुझे पता है, यह अभी भी मेरे लिए काम करता है (पायथन 2.6 के रूप में)। मैं जो जानना चाहता हूं वह इस मुद्दे के बारे में कोई आधिकारिक सिफारिश है। इसलिए, यदि आप इस प्रश्न का उत्तर देते हैं, तो कृपया अपने संदर्भ पोस्ट करें




परिभाषित उत्तर: import os करें और os.path उपयोग os.pathimport os.path सीधे import os.path करें।

मॉड्यूल के दस्तावेज़ीकरण से ही:

>>> import os
>>> help(os.path)
...
Instead of importing this module directly, import os and refer to
this module as os.path.  The "os.path" name is an alias for this
module on Posix systems; on other systems (e.g. Mac, Windows),
os.path provides the same operations in a manner specific to that
platform, and is an alias to another module (e.g. macpath, ntpath).
...



कोई निश्चित संदर्भ नहीं मिला, लेकिन मुझे लगता है कि os.walk के लिए उदाहरण कोड os.walk का उपयोग करता है लेकिन केवल आयात करता है




Related