「…로부터.import와 import를 비교합니다.
코드 조각에 차이가 있는지 궁금합니다.
from urllib import request
그리고 단편은
import urllib.request
또는 서로 교환할 수 있는지 확인합니다.호환성이 있는 경우는, 어느 쪽이 「표준」/「우선」구문입니까(있는 경우)?
Import를 참조할 때 Import에 액세스하는 방법에 따라 달라집니다.
from urllib import request
# access request directly.
mine = request()
import urllib.request
# used as urllib.request
mine = urllib.request()
또한 단순성을 위해 또는 빌트인의 마스킹을 방지하기 위해 Import할 때 직접 에일리어스를 지정할 수도 있습니다.
from os import open as open_
# lets you use os.open without destroying the
# built in open() which returns file handles.
많은 분들이 이미 설명해주셨어요import
대from
그래서 좀 더 자세히 설명하려고 합니다만, 실제의 차이는 어디에 있는지.
우선 기본 수입 명세서가 정확히 어떤 역할을 하는지 설명하겠습니다.
import X
모듈을 Import합니다.
X
현재 네임스페이스에 해당 모듈에 대한 참조를 만듭니다.다음으로 모듈 내부에서 특정 속성 또는 메서드에 액세스하기 위한 완료된 모듈 경로를 정의해야 합니다(예:X.name
또는X.attribute
)
from X import *
모듈을 Import합니다.
X
현재 네임스페이스에서 해당 모듈에 의해 정의된 모든 퍼블릭오브젝트에 대한 참조를 만듭니다(즉, 이름이 다음 문자로 시작하지 않은 모든 오브젝트)._
또는 당신이 언급한 어떤 이름이라도 상관없습니다.즉, 이 스테이트먼트를 실행한 후 플레인(수식되지 않은) 이름을 사용하여 모듈에서 정의된 것을 참조할 수 있습니다.
X
.그렇지만X
정의되어 있지 않기 때문에X.name
동작하지 않습니다.그리고 만약name
이미 정의되어 있어 새로운 버전으로 대체되어 있습니다.그리고 만약 이름이X
다른 오브젝트를 가리키도록 변경되어 모듈이 알아채지 못합니다.그러면 모듈의 모든 이름을 로컬 이름 공간에서 사용할 수 있습니다.
그러면 어떻게 되는지 봅시다.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()
namespace dict with nameos
그리고.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
:
>>> 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
부터locals()
네임스페이스에 액세스 할 수 없습니다.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
>>>
자, 봅시다.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 했을 때와 똑같아 보입니다.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()에서 path를 삭제합니다.
>>> 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'
>>>
★★★★★의 에 관한 중 from
「Import」를 했을 .name
로부터: 2개의 모듈로부터:
>>> import sys
>>> from os import stat
>>> locals()['stat']
<built-in function stat>
>>>
>>> stat
<built-in function stat>
from 계 import statshutil
추가:
>>>
>>> from shutil import stat
>>> locals()['stat']
<module 'stat' from
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/stat.pyc'>
>>> stat
<module 'stat' from
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/stat.pyc'>
>>>
마지막 Import가 성공합니다.
차이가 있다.경우에 따라서는 한쪽이 작동하고 다른 한쪽이 작동하지 않을 수 있습니다.예를 들어 다음과 같은 구조를 가지고 있다고 가정합니다.
foo.py
mylib\
a.py
b.py
Import를 .b.py
a.py
수입하고 a.py
로로 합니다.foo
거거어 떻떻? ???의 문(in)a
import b
»foo.py
나는 다음과 같이 쓰고 있다.
import mylib.a
이렇게 '아, 아, 아'가 생성됩니다.ImportError
를 하려고 할 때foo.py
이 수입 에 대해 a.py
)import b
모듈 b가 없다고 합니다.럼럼 이걸 떻떻 떻? ?? ??? a
로로 합니다.import mylib.b
된다a
★★★★★★★★★★★★★★★★★」b
다 있다mylib
여기서의 솔루션(또는 적어도1개의 솔루션)은 절대 Import를 사용하는 것입니다.
from mylib import b
출처: Python: 모듈을 Import하는 모듈 Import
Python3는 urlib이었다.두 가지 양식이 모두 허용되며 어느 한 가지 형태의 Import가 다른 형식보다 선호되지 않습니다.되어 있는 는, 의 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」를하는 경우가 있습니다.from x.y.z.a import s
패키지의 두은 urlib 입니다.import urllib.request
urllib.request
표준 라이브러리가 균일하게 사용하는 방법입니다.
2.에서는 python 2.x는 할 수 .import urllib2.urlopen
야야돼돼를 해야 .from urllib2 import urlopen
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib2.urlopen
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named urlopen
>>> import urllib.request
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named request
>>>
urlib.request import에 대한 저의 주된 불만은 urlib.parse를 Import하지 않아도 참조할 수 있다는 것입니다.
>>> import urllib3.request
>>> urllib3.logging
<module 'logging' from '/usr/lib/python2.7/logging/__init__.pyc'>
또한 저를 위한 요청은 urlib3 아래에 있습니다.Python 2.7.4 우분투
언급URL : https://stackoverflow.com/questions/9439480/from-import-vs-import
'programing' 카테고리의 다른 글
Java에서 어레이를 만드는 방법 (0) | 2023.01.01 |
---|---|
Maria를 사용하여 Json 개체 내부의 특정 값으로 필드 업데이트DB (0) | 2023.01.01 |
SQL 쿼리가 atomic인지 확인하는 방법 (0) | 2023.01.01 |
치명적 오류: 정의되지 않은 함수 mcrypt_encrypt() 호출 (0) | 2023.01.01 |
이스케이프 문자열 Python for MySQL (0) | 2023.01.01 |