Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

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는 Python 2.0을 위한 import as 제안을 설명합니다. 이 PEP는 이 기능의 상태와 담당자를 추적합니다. 이 문서에는 기능에 대한 설명과 기능을 지원하는 데 필요한 변경 사항의 개요가 담겨 있습니다. 이 파일의 CVS 리비전 이력에 확정적인 과거 기록이 담겨 있습니다.

근거

이 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 파서가 이를 키워드로 여기지 않게 하려면 약간의 편법을 써야 합니다. 하지만 더 발전된 파서/토크나이저에서는 이것이 문제가 되지 않을 것입니다.

서브 모듈을 임포트할 때는 약간 특별한 경우가 있습니다. 다음 문은

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]가 증명하듯 최소한이며, 그 결과로 얻어지는 일반화는 Python의 다른 대입 구문과 완전히 나란히 동작하는 여러 새로운 구문을 가능하게 합니다. 그러나 이 아이디어는 “과잉 일반화(hypergeneralization)”라는 이유로 Guido에 의해 거부되었습니다.

References