Python

__future__ — 퓨처 문 정의

소스 코드: Lib/__future__.py


from __future__ import feature 형태의 임포트는 :ref:`미래 문 <future>`라고 불립니다. 이것은 Python 컴파일러에 의해 특별 처리되어, 해당 기능이 표준이 되는 릴리스 이전에 미래 문을 포함하는 모듈에서 새로운 Python 기능 사용을 허용합니다.

이러한 미래 문들은 Python 컴파일러에 의해 추가적인 특별한 의미가 주어지지만, 여전히 다른 임포트 문처럼 실행되며 :mod:`!__future__`는 존재하고 다른 모든 Python 모듈과 동일한 방식으로 임포트 시스템에 의해 처리됩니다. 이 디자인은 세 가지 목적에 사용됩니다:

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

  • To document when incompatible changes were introduced, and when they will be — or were — made mandatory. This is a form of executable documentation, and can be inspected programmatically via importing __future__ and examining its contents.

  • To ensure that future statements run under releases prior to Python 2.1 at least yield runtime exceptions (the import of __future__ will fail, because there was no module of that name prior to 2.1).

모듈 내용

어떤 기능 설명도 :mod:`!__future__`에서 삭제되지 않습니다. Python 2.1에서 소개된 이후로 다음 기능들이 이 메커니즘을 사용하여 언어에 통합되었습니다:

기능

선택적 버전

필수적 버전

효과

__future__.nested_scopes

2.1.0b1

2.2

PEP 227: 정적으로 중첩된 스코프

__future__.generators

2.2.0a1

2.3

PEP 255: 단순 제너레이터

__future__.division

2.2.0a2

3.0

PEP 238: 나누기 연산자 변경

__future__.absolute_import

2.5.0a1

3.0

PEP 328: 임포트: 복수 줄 및 절대/상대

__future__.with_statement

2.5.0a1

2.6

PEP 343: “with” 문

__future__.print_function

2.6.0a2

3.0

PEP 3105: print를 함수로 만들기

__future__.unicode_literals

2.6.0a2

3.0

PEP 3112: 파이썬 3000의 바이트열 리터럴

__future__.generator_stop

3.5.0b1

3.7

PEP 479: 제너레이터 내부의 StopIteration 처리

__future__.annotations

3.7.0b1

절대 [1]

PEP 563: 어노테이션의 연기된 평가, PEP 649: 데스크리터를 사용한 어노테이션의 지연된 평가

class __future__._Feature

__future__.py 의 각 문장은 다음과 같은 형식입니다:

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

보통, OptionalReleaseMandatoryRelease 보다 작으며, 둘 다 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 는 기능이 언어 일부가 된 때를 기록합니다; 그 배포와 그 이후의 배포에서, 모듈이 해당 기능을 사용하기 위해 더 퓨처 문을 요구하지 않지만, 그러한 임포트는 계속 사용할 수 있습니다.

MandatoryReleaseNone 일 수도 있습니다. 이는 계획된 기능이 삭제되었거나 아직 결정되지 않았음을 의미합니다.

_Feature.compiler_flag

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

더 보기

퓨처 문

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

PEP 236 - __future__로 돌아가기

__future__ 메커니즘에 대한 원래 제안입니다.