पायथन में इन आयातों में क्या अंतर है और आप इनका उपयोग कब करेंगे? कितने बिंदु "।" क्या हम उपयोग कर सकते हैं?

from something import this
from .. import this
from . import this
2
Anna Taylor 16 अप्रैल 2020, 19:30

3 जवाब

सबसे बढ़िया उत्तर

व्याख्या

कल्पना कीजिए कि हमारे पास निम्नलिखित संरचना है:

| my_package
| __init__.py
|___ inner_package
    | __init__.py
    | foo.py
    | bar.py
    |___ even_more_inner_package
        | inner_foo.py
        |___ __init__.py
| main.py

पहला from something import this शीर्ष एप्लिकेशन पैकेज से आयात करता है, जिसका अर्थ है कि अगर हम अपनी फ़ाइलों में कहीं भी inner_package से कुछ आयात करना चाहते हैं, तो हमें इसे इस तरह करना होगा:

from my_package.inner_package import foo

दूसरे और तीसरे आयात विवरण को सापेक्ष आयात के रूप में भी जाना जाता है, जो फ़ोल्डर के रूप में बिल्कुल काम करता है:

दूसरा कथन from .. import something का अर्थ है "ऊपरी पैकेज से, कुछ आयात करें"। कल्पना कीजिए कि हम inner_foo.py के अंदर हैं, जो my_package.inner_package.even_more_inner_package के अंदर है, हम bar.py आयात करने के लिए निम्न कार्य कर सकते हैं:

# This statement goes one package up and looks for bar
from .. import bar

अंतिम from . import something कथन का अर्थ है "इस मौजूदा पैकेज से, कुछ आयात करें"। यदि हम bar.py से कोड लिख रहे थे और foo.py आयात करना चाहते थे तो हम इसका उपयोग कर सकते थे:

from . import foo

ध्यान दें

आप शीर्ष स्तर के पैकेज पर सापेक्ष आयात from .. का उपयोग नहीं कर सकते। इस उदाहरण में, from .. import my_package को main.py के अंदर क्रियान्वित करने से एक ImportError बढ़ जाएगा।

2
Cblopez 16 अप्रैल 2020, 19:45

यह काफी हद तक Unix जैसा ही है।

जिस तरह से आप cd .. करते हैं, इसका मतलब है कि आप पैरेंट डीआईआर में जाना चाहते हैं।

और, cd . का अर्थ है वर्तमान डीआईआर।

0
Mayank Porwal 16 अप्रैल 2020, 19:44

इसे सापेक्ष आयात कहा जाता है। एक सापेक्ष आयात वर्तमान स्थान के सापेक्ष आयात किए जाने वाले संसाधन को निर्दिष्ट करता है—अर्थात वह स्थान जहां आयात विवरण है।

एक एकल बिंदु का अर्थ है कि संदर्भित मॉड्यूल या पैकेज वर्तमान स्थान के समान निर्देशिका में है। दो बिंदुओं का अर्थ है कि यह वर्तमान स्थान की मूल निर्देशिका में है—अर्थात, ऊपर दी गई निर्देशिका। तीन बिंदुओं का मतलब है कि यह दादा-दादी निर्देशिका में है, और इसी तरह।

मान लीजिए:

└── project
    ├── package1
    │   ├── module1.py
    │   └── module2.py
    └── package2
        ├── __init__.py
        ├── module3.py
        ├── module4.py
        └── subpackage1
            └── module5.py

फ़ाइल सामग्री मान लें:

package1/module2.py contains a function, function1.

package2/__init__.py contains a class, class1.

package2/subpackage1/module5.py contains a function, function2.

आप function1 को package1/module1.py फ़ाइल में इस प्रकार आयात कर सकते हैं:

from .module2 import function1

आप इस तरह से package2/module3.py फ़ाइल में class1 और function2 आयात कर सकते हैं:

from . import class1
from .subpackage1.module5 import function2

एक अच्छा स्रोत: निरपेक्ष बनाम सापेक्ष आयात

0
Junkrat 16 अप्रैल 2020, 19:48