많은 사람들이 이미 import
vs 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
OK,하자 검사는이처럼 보이는 방법 locals()
및 globals()
dicts 네임 스페이스 :
>>> 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
>>>
에서 'path'를 삭제합시다 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'
>>>