가져오기 문 python3의 변경 사항
pep-0404의 다음 내용을 이해할 수 없습니다.
Python 3에서는 패키지 내의 암묵적 상대 가져오기를 더 이상 사용할 수 없습니다. 절대 가져오기와 명시적 상대 가져오기만 지원됩니다.또한 별 가져오기(예: x 가져오기*)는 모듈 수준 코드에서만 허용됩니다.
상대적으로 중요한 것은 무엇입니까?python2에서 스타 가져오기가 허용된 다른 장소는 어디입니까?예를 들어 설명해 주세요.
상대 가져오기는 현재 스크립트/패키지를 기준으로 패키지를 가져올 때마다 수행됩니다.
다음 트리를 예로 들어 보겠습니다.
mypkg
├── base.py
└── derived.py
자, 당신의derived.py
필요한 것이 있습니다.base.py
파이썬 2에서, 당신은 이렇게 할 수 있었습니다.derived.py
):
from base import BaseThing
파이썬 3은 '상대적'인지 '절대적'인지 명시적이지 않기 때문에 더 이상 지원하지 않습니다.base
즉, Python 패키지에 다음과 같은 이름이 있다면base
시스템에 설치하면 잘못된 것을 얻을 수 있습니다.
대신 경로 유사성 기준으로 모듈의 위치를 명시적으로 지정하는 명시적 가져오기를 사용해야 합니다.당신의.derived.py
다음과 같이 표시됩니다.
from .base import BaseThing
선두의.
'import'라고 말합니다.base
모듈 디렉토리'에서, 즉,.base
에 대한 지도../base.py
.
마찬가지로, 있습니다...
디렉토리 계층 구조로 올라가는 접두사../
(와 함께)..mod
에 매핑.../mod.py
), 그 다음...
그것은 두 단계로 올라갑니다.../../mod.py
) 등.
그러나 위에 나열된 상대 경로는 현재 모듈(derived.py
)가 현재 작업 디렉터리가 아닌 에 있습니다.
@BrenBarn은 이미 스타 수입 사례에 대해 설명했습니다.완전성을 위해서는 저도 같은 말을 해야 할 것입니다 ;).
예를 들어, 몇 가지를 사용해야 합니다.math
기능은 하나의 기능에서만 사용합니다.Python 2에서 당신은 반 게으름뱅이가 될 수 있었습니다.
def sin_degrees(x):
from math import *
return sin(degrees(x))
Python 2에서 이미 경고를 트리거합니다.
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
현대의 파이썬 2 코드에서는 다음 중 하나를 수행해야 합니다.
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
또는:
from math import *
def sin_degrees(x):
return sin(degrees(x))
상대적인 가져오기는 설명서를 참조하십시오.상대적인 가져오기는 절대적으로 다음에서가 아니라 해당 모듈의 위치에 상대적인 모듈에서 가져올 때입니다.sys.path
.
에 대해서는import *
파이썬 2는 다음과 같은 함수 내에서 스타 가져오기를 허용했습니다.
>>> def f():
... from math import *
... print sqrt
Python 2(최소한 최신 버전)에서는 이에 대한 경고가 발생합니다.Python 3에서는 더 이상 허용되지 않으며 모듈의 최상위 수준에서만 스타 가져오기를 수행할 수 있습니다(함수 또는 클래스 내부가 아님).
Python 2와 Python 3을 모두 지원하려면 아래와 같이 명시적인 상대 가져오기를 사용합니다.이 값은 현재 모듈에 상대적입니다.2.5부터 지원됩니다.
from .sister import foo
from . import brother
from ..aunt import bar
from .. import uncle
마이클 고니의 대답에 또 다른 사례를 추가했습니다.
상대 가져오기는 현재 모듈의 이름을 기반으로 합니다.은 항상 메인모듈이입항름상은다 "니의입다"이기 입니다.__main__
Python 응용 프로그램의 기본 모듈로 사용되는 모듈은 항상 절대 가져오기를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/12172791/changes-in-import-statement-python3
'programing' 카테고리의 다른 글
연결 문자열에서 Trusted_Connection과 Integrated Security의 차이점은 무엇입니까? (0) | 2023.05.05 |
---|---|
파이썬을 사용하여 mongodb에서 커서의 길이를 얻는 방법은 무엇입니까? (0) | 2023.05.05 |
특정 Git 커밋 보기 (0) | 2023.05.05 |
이클립스에서 빵가루를 비활성화하는 방법 (0) | 2023.05.05 |
VBA 기능에 대한 Excel의 #NAME (0) | 2023.05.05 |