[Final] PEP 221 - Import As
원문 링크: PEP 221 - Import As
상태: Final 유형: Standards Track 작성일: 15-Aug-2000
PEP 221 – Import As
- 작성자: Thomas Wouters
- 상태: Final (최종)
- 유형: Standards Track
- 작성일: 2000년 8월 15일
- Python 버전: 2.0
서론 (Introduction)
이 PEP는 Python 2.0을 위한 import ... as ...
제안을 설명합니다. 이 문서에서는 해당 기능의 상태와 소유권을 추적하며, 기능에 대한 설명과 이를 지원하기 위해 필요한 변경 사항을 개략적으로 다룹니다. 이 파일의 CVS 리비전 기록에는 확정적인 이력 기록이 포함되어 있습니다.
제안 배경 (Rationale)
이 PEP는 import
및 from <module> import
문에 대한 Python 구문 확장을 제안합니다. 이 문장들은 모듈을 로드하고, 해당 모듈을 로컬 이름에 바인딩하거나, 해당 모듈의 객체들을 로컬 이름에 바인딩합니다. 그러나 때로는 이름 충돌을 피하기 위해 이러한 객체들을 다른 이름으로 바인딩하는 것이 바람직할 수 있습니다. 현재는 다음과 같은 관용구를 사용하여 이를 달성할 수 있습니다.
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 파서(parser)가 이를 키워드로 인식하지 않도록 약간의 트릭이 사용되어야 합니다. 그러나 더 고급 파서/토크나이저(tokenizer)의 경우 이는 문제가 되지 않을 것입니다.
서브 모듈(sub-modules)을 임포트하는 경우 약간 특별한 사례가 있습니다.
import os.path
위 문장은 모듈 os
를 로컬에 os
로 저장하여, 임포트된 서브 모듈 path
가 os.path
로 접근 가능하게 합니다.
결과적으로,
import os.path as p
는 os
가 아닌 os.path
를 p
에 저장합니다. 이는 사실상 다음과 동일합니다.
from os import path as p
구현 세부 사항 (Implementation details)
이 PEP는 승인되었으며, 제안된 코드 변경 사항은 이미 체크인(checked in)되었습니다. 패치는 여전히 SourceForge 패치 매니저에서 찾을 수 있습니다. 현재 문법에서는 키워드 문제를 피하기 위해 순수한 문자열 대신 NAME
필드가 사용됩니다. 이 변경으로 새로운 바이트코드(bytecode)인 IMPORT_STAR
가 도입되었는데, 이는 from module import *
의 동작을 수행합니다. 또한, IMPORT_FROM
바이트코드의 동작이 변경되어 요청된 이름(항상 단일 이름)을 스택에 로드한 다음, STORE
opcode에 의해 저장되도록 합니다. 결과적으로, 명시적으로 임포트된 모든 이름은 이제 전역 지시자(global directives)를 따릅니다.
from module import *
의 특수 사례는 as
절을 포함할 수 없고 STORE
opcode가 생성되지 않는다는 점에서 여전히 특수 사례로 남아 있습니다. 임포트된 객체들은 직접 로컬 네임스페이스(namespace)로 로드됩니다. 이는 또한 이러한 방식으로 임포트된 이름들은 항상 로컬이며 global
지시자를 따르지 않는다는 것을 의미합니다.
as
절 뒤에 오는 표현식을 일반화하기 위한 추가적인 구문 변경도 제안되었습니다. 단일 이름 대신, 유효한 l-value (할당될 수 있는 모든 것)를 산출하는 모든 표현식이 허용될 수 있었습니다. 이 변경을 수용하는 것은 최소한이며, 패치가 증명하듯이, 결과적인 일반화는 다른 Python 할당 구문과 완전히 병행하는 여러 새로운 구문을 허용합니다. 그러나 이 아이디어는 Guido에 의해 “과도한 일반화 (hypergeneralization)”로 간주되어 거부되었습니다.
저작권 (Copyright)
이 문서는 Public Domain에 공개되었습니다.
참고 자료 (References)
- CPython 리비전 (https://hg.python.org/cpython/rev/18385172fac0)
- SourceForge 패치 (http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470)
⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.
Comments