# `__future__` — 퓨처 문 정의

소스 코드: Lib/__future__.py

`__future__` 는 실제 모듈이며 세 가지 용도로 사용됩니다:

- 임포트 문을 분석하고 임포트하는 모듈을 발견하리라고 기대하는 기존 도구가 혼동하지 않게 하려고.

- 2.1 이전의 배포에서 퓨처 문 을 실행하면 최소한 실행시간 예외를 일으키도록 보장하기 위해 (2.1 이전에는 그런 이름의 모듈이 없으므로 `__future__` 임포트는 실패합니다).

- 호환되지 않는 변경 사항이 도입된 시점과 그것이 필수적일 때를 — 또는 이미 필수적으로 된 때를 — 문서로 만들기 위해. 이것은 실행 가능한 문서 형식이며, `__future__` 를 임포트 해서 내용을 들여다봄으로써 프로그래밍 방식으로 검사 할 수 있습니다.

`__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
    )

OptionalRelease 는 해당 기능이 승인된 첫 번째 배포를 기록합니다.

MandatoryRelease 가 아직 배포되지 않은 경우, MandatoryRelease 는 해당 기능이 언어 일부가 될 배포를 예측합니다.

그렇지 않으면 MandatoryRelease 는 기능이 언어 일부가 된 때를 기록합니다; 그 배포와 그 이후의 배포에서, 모듈이 해당 기능을 사용하기 위해 더 퓨처 문을 요구하지 않지만, 그러한 임포트는 계속 사용할 수 있습니다.

MandatoryRelease 는 `None` 일 수도 있습니다. 이는 계획된 기능이 삭제되었음을 의미합니다.

클래스 `_Feature` 의 인스턴스는 두 개의 상응하는 메서드인 `getOptionalRelease()` 와 `getMandatoryRelease()` 를 가지고 있습니다.

CompilerFlag 은 동적으로 컴파일되는 코드에서 해당 기능을 활성화하기 위해, 내장 함수 `compile()` 의 네 번째 인자로 전달되어야 하는 (비트 필드) 플래그입니다. 이 플래그는 `_Feature` 인스턴스의 `compiler_flag` 어트리뷰트에 저장됩니다.

어떤 기능 설명도 `__future__` 에서 삭제되지 않습니다. 파이썬 2.1에서 소개된 이후로 이 메커니즘을 사용하여 다음과 같은 기능이 언어에 도입되었습니다:

기능 | 선택적 버전 | 필수적 버전 | 효과
--- | --- | --- | ---
nested_scopes | 2.1.0b1 | 2.2 | PEP 227: 정적으로 중첩된 스코프
generators | 2.2.0a1 | 2.3 | PEP 255: 단순 제너레이터
division | 2.2.0a2 | 3.0 | PEP 238: 나누기 연산자 변경
absolute_import | 2.5.0a1 | 3.0 | PEP 328: 임포트: 복수 줄 및 절대/상대
with_statement | 2.5.0a1 | 2.6 | PEP 343: “with” 문
print_function | 2.6.0a2 | 3.0 | PEP 3105: print를 함수로 만들기
unicode_literals | 2.6.0a2 | 3.0 | PEP 3112: 파이썬 3000의 바이트열 리터럴
generator_stop | 3.5.0b1 | 3.7 | PEP 479: 제너레이터 내부의 StopIteration 처리
annotations | 3.7.0b1 | TBD 1 | PEP 563: 어노테이션의 지연된 평가

1

  `from __future__ import annotations` was previously scheduled to become mandatory in Python 3.10, but the Python Steering Council twice decided to delay the change (announcement for Python 3.10; announcement for Python 3.11). No final decision has been made yet. See also PEP 563 and PEP 649.

더 보기

퓨처 문

  컴파일러가 퓨처 임포트를 처리하는 방법.