हालांकि कई लोग पहले से ही 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'
>>>