PEP 221 – Import As
- Author:
- Thomas Wouters <thomas at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 15-Aug-2000
- Python-Version:
- 2.0
- Post-History:
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
소개
이 PEP는 파이썬 2.0을 위한 import as 제안을 설명합니다. 이 PEP는 이 기능의 상태와 소유권을 추적합니다. 이 문서는 기능에 대한 설명을 담고 있으며, 이 기능을 지원하는 데 필요한 변경 사항을 요약합니다. 이 파일의 CVS 리비전 이력은 확정적인 역사적 기록을 담고 있습니다.
근거
이 PEP는 import문과 from <module> import문에 관한 파이썬 문법의 확장을 제안합니다. 이 문들은 모듈을 로드하며, 그 모듈을 지역 이름에 바인딩하거나, 그 모듈로부터의 객체들을 지역 이름에 바인딩합니다. 하지만 때로는 이름 충돌을 피하기 위해서와 같은 이유로, 그 객체들을 다른 이름에 바인딩하는 것이 바람직할 때가 있습니다. 이는 현재 다음과 같은 관용구를 사용해 달성할 수 있습니다.:
import os
real_os = os
del os
from ... import문에 대해서도 마찬가지입니다.:
from os import fdopen, exit, stat
os_fdopen = fdopen
os_stat = stat
del fdopen, stat
제안된 문법 변경은 다음과 같이 이 두 문에 선택적인 as절을 추가합니다.:
import os as real_os
from os import fdopen as os_fdopen, exit, stat as os_stat
as라는 이름은 키워드로 의도된 것이 아니며, CPython 파서가 이것이 키워드가 아니라고 확신하게 하려면 약간의 편법이 필요합니다. 하지만 더 발전된 파서/토크나이저에서는 이것이 문제가 되지 않아야 합니다.
하위 모듈을 임포트하는 경우에는 약간 특별한 사례가 존재합니다. 다음 문장은
import os.path
모듈 os를 로컬에서 os로 저장하므로, 임포트된 하위 모듈 path는 os.path로 접근할 수 있습니다. 그 결과,
import os.path as p
p에는 os가 아니라 os.path가 저장됩니다. 이는 사실상 다음과 동일하게 만듭니다.
from os import path as p
구현 세부 사항
이 PEP는 채택되었으며, 제안된 코드 변경 사항이 반영되었습니다. 해당 패치는 SourceForge 패치 관리자 [1]에서 여전히 찾을 수 있습니다. 현재는 키워드 문제를 피하기 위해, 문법에서 단순 문자열 대신 NAME 필드를 사용합니다. 이는 from module import * 동작을 수행하는 새로운 바이트코드 IMPORT_STAR를 도입하고, IMPORT_FROM 바이트코드의 동작을 변경하여 요청된 이름(항상 단일 이름)을 스택에 로드한 뒤, STORE 옵코드에 의해 이후 저장되도록 합니다. 그 결과, 명시적으로 임포트된 모든 이름은 이제 global 지시문을 따릅니다.
from module import *의 특수한 경우는 여전히 특수한 경우로 남아 있는데, as 절을 수용할 수 없고 STORE 옵코드가 생성되지 않으며, 임포트된 객체는 로컬 네임스페이스에 직접 로드됩니다. 이는 또한 이런 방식으로 임포트된 이름이 항상 로컬이며, global 지시문을 따르지 않는다는 것을 의미합니다.
이 구문에 대한 추가 변경도 제안된 바 있는데, as 절 뒤에 오는 표현식을 일반화하자는 것입니다. 단일 이름 대신, 유효한 l-value를 산출하는 임의의 표현식, 즉 할당 가능한 어떤 것이든 허용될 수 있다는 것입니다. 이를 수용하기 위한 변경은 패치 [2]가 증명하듯 최소한에 그치며, 그 결과로 얻어지는 일반화는 다른 파이썬 할당 구문들과 완전히 평행하게 작동하는 여러 새로운 구성을 가능하게 합니다. 그러나 이 아이디어는 귀도에 의해 “과잉 일반화(hypergeneralization)”라는 이유로 거부되었습니다.
Copyright
This document has been placed in the Public Domain.