__future__ — 퓨처 문 정의¶
소스 코드: Lib/__future__.py
from __future__ import feature 형태의 임포트는 future statements 라고 불립니다. 이는 해당 기능이 표준이 되는 버전 출시 전에도 퓨처 문이 포함된 모듈에서 새로운 파이썬 기능을 사용할 수 있도록 파이썬 컴파일러가 특별하게 처리합니다.
이 퓨처 문들은 파이썬 컴파일러에 의해 추가적인 특별한 의미가 부여되지만, 여전히 다른 모든 임포트 문과 동일하게 실행되며, __future__ 는 존재하며 임포트 시스템에서 다른 파이썬 모듈과 동일한 방식으로 처리됩니다. 이 설계에는 세 가지 목적이 있습니다.
임포트 문을 분석하고 임포트하는 모듈을 발견하리라고 기대하는 기존 도구가 혼동하지 않게 하려고.
호환되지 않는 변경 사항이 도입된 시점과 해당 변경 사항이 필수화될 시점(또는 이미 필수화된 경우)을 기록하기 위한 기능입니다. 이는 실행 가능한 문서의 한 형태이며,
__future__를 임포트하여 그 내용을 조사함으로써 프로그래밍 방식으로 확인할 수 있습니다.파이썬 2.1 이전 버전에서 실행될 때 future 문 가 최소한 런타임 예외를 발생시키도록 보장하기 위한 것입니다(2.1 이전에는 해당 이름의 모듈이 없으므로
__future__임포트 시 실패하게 됩니다).
모듈 내용¶
__future__ 에서 기능 설명이 삭제되는 일은 없습니다. 파이썬 2.1에 도입된 이후로 다음과 같은 기능들이 이 메커니즘을 통해 언어에 포함되었습니다.
기능 |
선택적 버전 |
필수적 버전 |
효과 |
|---|---|---|---|
|
2.1.0b1 |
2.2 |
PEP 227: 정적으로 중첩된 스코프 |
|
2.2.0a1 |
2.3 |
PEP 255: 단순 제너레이터 |
|
2.2.0a2 |
3.0 |
PEP 238: 나누기 연산자 변경 |
|
2.5.0a1 |
3.0 |
PEP 328: 임포트: 복수 줄 및 절대/상대 |
|
2.5.0a1 |
2.6 |
PEP 343: “with” 문 |
|
2.6.0a2 |
3.0 |
PEP 3105: print를 함수로 만들기 |
|
2.6.0a2 |
3.0 |
PEP 3112: 파이썬 3000의 바이트열 리터럴 |
|
3.5.0b1 |
3.7 |
PEP 479: 제너레이터 내부의 StopIteration 처리 |
|
3.7.0b1 |
Never [1] |
PEP 563: 어노테이션의 지연된 평가, PEP 649: descriptor를 사용한 어노테이션의 지연된 평가 |
- class __future__._Feature¶
__future__.py의 각 문장은 다음과 같은 형식입니다:FeatureName = _Feature(OptionalRelease, MandatoryRelease, CompilerFlag)
보통, OptionalRelease 는 MandatoryRelease 보다 작으며, 둘 다
sys.version_info와 같은 형태의 5-튜플입니다:(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int PY_MINOR_VERSION, # the 1; an int PY_MICRO_VERSION, # the 0; an int PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string PY_RELEASE_SERIAL # the 3; an int )
- _Feature.getOptionalRelease()¶
OptionalRelease 는 해당 기능이 승인된 첫 번째 배포를 기록합니다.
- _Feature.getMandatoryRelease()¶
MandatoryRelease 가 아직 배포되지 않은 경우, MandatoryRelease 는 해당 기능이 언어 일부가 될 배포를 예측합니다.
그렇지 않으면 MandatoryRelease 는 기능이 언어 일부가 된 때를 기록합니다; 그 배포와 그 이후의 배포에서, 모듈이 해당 기능을 사용하기 위해 더 퓨처 문을 요구하지 않지만, 그러한 임포트는 계속 사용할 수 있습니다.
MandatoryRelease 는
None일 수도 있습니다. 이는 계획된 기능이 삭제되었거나 아직 결정되지 않았음을 의미합니다.
- _Feature.compiler_flag¶
CompilerFlag 은 동적으로 컴파일되는 코드에서 해당 기능을 활성화하기 위해, 내장 함수
compile()의 네 번째 인자로 전달되어야 하는 (비트 필드) 플래그입니다. 이 플래그는_Feature인스턴스의_Feature.compiler_flag어트리뷰트에 저장됩니다.