हालांकि कई लोग पहले से ही import
बनाम के बारे में import from
समझाते हैं, मैं हुड के नीचे क्या होता है, और जहां सभी जगह बदलती हैं, उसके बारे में थोड़ा और समझाने की कोशिश करना चाहता हूं।
import foo
:
आयात करता है foo
, और वर्तमान नामस्थान में उस मॉड्यूल का संदर्भ बनाता है। फिर आपको मॉड्यूल के अंदर से किसी विशेष विशेषता या विधि तक पहुंचने के लिए पूर्ण मॉड्यूल पथ को परिभाषित करने की आवश्यकता है।
जैसे foo.bar
लेकिन नहींbar
from foo import bar
:
आयात foo
, और बनाता संदर्भ सूचीबद्ध सभी सदस्यों के लिए ( bar
)। चर सेट नहीं करता है foo
।
जैसे bar
लेकिन नहीं baz
याfoo.baz
from foo import *
:
आयात करता है foo
, और वर्तमान नाम स्थान में उस मॉड्यूल द्वारा परिभाषित सभी सार्वजनिक वस्तुओं के संदर्भ बनाता है ( __all__
यदि __all__
मौजूद सब कुछ सूचीबद्ध है, अन्यथा सब कुछ जो इसके साथ शुरू नहीं होता है _
)। चर सेट नहीं करता है foo
।
जैसे bar
और baz
लेकिन _qux
या नहीं foo._qux
।
अब देखते हैं कि हम कब क्या करते हैं import X.Y
:
>>> import sys
>>> import os.path
sys.modules
नाम के साथ जांचें os
और os.path
:
>>> sys.modules['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> sys.modules['os.path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
के साथ चेक globals()
और locals()
नेमस्पेस dicts os
और os.path
:
>>> globals()['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> locals()['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> globals()['os.path']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'os.path'
>>>
उपरोक्त उदाहरण से हमने पाया कि केवल os
स्थानीय और वैश्विक नामस्थान में डाला गया है। तो, हम उपयोग करने में सक्षम होना चाहिए:
>>> os
<module 'os' from
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> os.path
<module 'posixpath' from
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>>
लेकिन नहीं path
।
>>> path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'path' is not defined
>>>
एक बार जब आप हटाना os
स्थानीय लोगों से () नाम स्थान, तुम नहीं एक्सेस कर पाएंगे हो जाएगा os
और साथ ही os.path
, भले ही वे sys.modules में मौजूद है:
>>> del locals()['os']
>>> os
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>> os.path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>>
अब बात करते हैं import from
:
from
:
>>> import sys
>>> from os import path
के sys.modules
साथ की जाँच करें os
और os.path
:
>>> sys.modules['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> sys.modules['os.path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
हमने पाया कि sys.modules
हमने उपयोग करने से पहले जैसा पाया था, वैसा ही पायाimport name
ठीक है, आइए देखें कि यह कैसा दिख रहा है locals()
और globals()
नाम स्थान के डिकेट:
>>> globals()['path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> locals()['path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> globals()['os']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'os'
>>>
आप द्वारा path
नहीं नाम का उपयोग करके उपयोग कर सकते हैं os.path
:
>>> path
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> os.path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>>
चलिए 'पथ' को हटाते हैं locals()
:
>>> del locals()['path']
>>> path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'path' is not defined
>>>
एक उपनाम का उपयोग करके एक अंतिम उदाहरण:
>>> from os import path as HELL_BOY
>>> locals()['HELL_BOY']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> globals()['HELL_BOY']
<module 'posixpath' from /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>>
और कोई रास्ता नहीं परिभाषित:
>>> globals()['path']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'path'
>>>