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

Python 개선 제안 한국어 번역

PEP 3100 – 기타 Python 3.0 계획

Author:
Brett Cannon <brett at python.org>
Status:
Final
Type:
Process
Created:
20-Aug-2004
Post-History:


Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

이전에 PEP 3000으로 알려졌던 이 PEP는 아직 별도의 PEP가 작성되지 않은 소규모 변경 사항과 새로운 기능을 설명하며, 모두 Python 3000을 대상으로 합니다.

이 문서에 포함된 기능 목록은 변경될 수 있으며 Python 개발 커뮤니티를 구속하지 않습니다. 기능은 언제든지 추가, 제거 및 수정될 수 있습니다. 이 목록의 목적은 언어 개발 노력을 3.0으로 나아가는 단계인 변경 사항에 집중하고, 사람들이 전환을 원활하게 할 방법을 고안하도록 장려하는 것입니다.

이 문서는 누구나 확장할 수 있는 희망 목록이 아닙니다. 이 PEP의 저자는 두 명이지만, 저희는 텍스트만 제공할 뿐입니다. 이 문서에 어떤 변경 사항을 나열할지는 Python 3.0의 목표로 해당 사항을 선택한 Guido van Rossum이 결정합니다.

Python 3.0에서 변경되지 않을 사항에 관한 Guido의 선언은 PEP 3099에 기록되어 있습니다.

일반적인 목표

일반적인 목표는 기존 방식을 제거하여 기능의 중복을 줄이는 것입니다. 설계의 일반 원칙은 어떤 일을 하는 명백한 방법 하나면 충분하다는 것입니다. [1]

영향을 주는 PEP

  • PEP 238 (나눗셈 연산자 변경)
  • PEP 328 (가져오기: 여러 줄 및 절대/상대 가져오기)
  • PEP 343 (“with” 문)
  • PEP 352 (예외에 필요한 슈퍼클래스)

스타일 변경

  • C 스타일 가이드는 탭을 전혀 사용하지 않고 4칸 들여쓰기를 사용하도록 업데이트됩니다. 이 스타일은 모든 새 파일에 사용해야 합니다. 기존 파일은 Python 2 HEAD에서 특정 파일을 병합할 희망이 전혀 없는 경우에만 업데이트할 수 있습니다. 파일 내에서는 들여쓰기 스타일이 일관되어야 합니다. 현재로서는 다른 스타일 가이드 변경 사항은 계획되어 있지 않습니다.

핵심 언어

  • 참 나눗셈이 기본 동작이 됩니다 PEP 238 [완료]
  • 문으로서 exec를 사용하는 것은 가치가 없으므로 함수로 만드십시오 [완료]
  • 정적 타이핑을 위한 선택적 선언을 추가합니다 PEP 3107 [10] [완료]
  • 새 스타일 클래스만 지원하며, 클래식 클래스는 사라집니다 [1] [완료]
  • print를 함수로 대체합니다 [14] PEP 3105 [완료]
  • 파일의 softspace속성이 사라집니다. [완료]
  • 오류 변수를 원한다면 except E1, E2, E3 as err:를 사용하십시오. [3] [완료]
  • None이 키워드가 됩니다 [4]; 또한 TrueFalse도 키워드가 됩니다 [완료]
  • ...를 일반 표현식 요소로 만듭니다 [16] [완료]
  • as가 키워드가 됩니다 [5] (이미 2.6부터 적용됨) [완료]
  • 리스트 컴프리헨션을 동등한 제너레이터 표현식을 list()에 전달하는 구문 설탕으로 만드십시오. 그 결과 루프 변수가 더 이상 노출되지 않습니다 PEP 289 [done]
  • 서로 다른 타입 간의 ==!=이외의 비교는 해당 타입에서 명시적으로 지원하지 않는 한 예외를 발생시킵니다 [6] [done]
  • float가 부주의하게 허용되는 연산에서 int 대신 float를 인자로 허용하지 않습니다 (PyArg_ParseTuple() i & l 형식).
  • 함수 스코프에서 from … import *를 제거합니다. [done] 이는 함수를 항상 최적화할 수 있으며, 최적화되지 않은 함수에 대한 지원을 제거할 수 있음을 의미합니다.
  • 임포트 PEP 328
    • 임포트는 기본적으로 절대 임포트가 됩니다. [done]
    • 상대 임포트는 명시적으로 지정해야 합니다. [done]
    • sys.modules의 간접 참조 항목은 지원하지 않습니다. (즉, A.string의 값이 None이면 최상위 string 모듈을 사용한다는 의미입니다.)
  • 하위 패키지에서는 __init__.py가 선택 사항이 될 수도 있습니까? 최상위 패키지에는 __init__.py가 여전히 필요합니다.
  • Py_InitModule() 변형 {,3,4}을 정리합니다 (임포트 및 파서 API도 포함합니다).
  • pythonrun 등에 내보내진 API를 정리합니다.
  • 2.x에서는 필요하지 않았던 일부 표현식에 괄호가 필요해집니다.
    • 리스트 컴프리헨션에서는 이터러블 주위에 괄호가 필요해집니다. 이는 리스트 컴프리헨션을 제너레이터 컴프리헨션과 더 유사하게 만듭니다. [x for x in 1, 2]는 다음과 같이 작성해야 합니다: [x for x in (1, 2)] [done]
    • 람다에는 괄호를 사용해야 할 수도 있습니다 PEP 308 [NO]
  • __builtin__과 __builtins__ 간의 혼동을 없애기 위해 __builtin__(모듈)의 이름을 builtins로 변경하고, __builtins__(샌드박스 훅)는 그대로 두기로 결정했습니다. [33] [34] [done]
  • func_whatever형식의 함수 속성 이름을 __whatever__로 변경합니다 [17] [done]
  • 집합 리터럴과 컴프리헨션 [19] [20] [done] 참고로 {range(x)}는 set([range(x)])를 의미하며, set(range(x))를 의미하지 않습니다. 빈 집합에 대한 리터럴은 없습니다. set()을 사용하십시오 (또는 {1}&{2} :-). frozenset 리터럴은 없습니다. 거의 필요하지 않기 때문입니다.
  • __nonzero__특수 메서드의 이름을 __bool__로 변경하고 bool을 반환하도록 해야 합니다. typeobject 슬롯의 이름은 tp_bool이 됩니다 [23] [done]
  • PEP PEP 274에서 처음 제안된 딕셔너리 컴프리헨션 [완료] {K(x): V(x) for x in S if P(x)}은 dict((K(x), V(x)) for x in S if P(x))을 의미합니다.

제거 대상:

  • 문자열 예외: Exception 클래스의 인스턴스를 사용합니다 [2] [done]
  • raise Exception, "message"대신 raise Exception("message")를 사용합니다 [12] [done]
  • x대신 repr(x)를 사용합니다 [2] [done]
  • <>연산자: 대신 !=를 사용합니다 [3] [done]
  • float의 __mod__ 및 __divmod__ 특수 메서드입니다. [이 메서드들은 유지해야 합니다] [21]
  • 바인딩되지 않은 메서드를 제거합니다 [7] [26] [done]
  • METH_OLDARGS [done]
  • WITH_CYCLE_GC [done]
  • __getslice__, __setslice__, __delslice__ [32]: 슬라이스 opcode를 제거하고 슬라이스 객체를 사용합니다. [done]
  • __oct__, __hex__: oct()hex()에서 대신 __index__를 사용합니다. [done]
  • __methods____members__ [done]
  • C API(코드 참조): PyFloat_AsString, PyFloat_AsReprString, PyFloat_AsStringEx, PySequence_In, PyEval_EvalFrame, PyEval_CallObject, _PyObject_Del, _PyObject_GC_Del, _PyObject_GC_Track, _PyObject_GC_UnTrack PyString_AsEncodedString, PyString_AsDecodedString PyArg_NoArgs, PyArg_GetInt, intargfunc, intintargfunc

    PyImport_ReloadModule ?

원자 타입

  • int 타입과 long 타입의 구분을 제거합니다. ‘long’ 내장 타입과 ‘L’ 또는 ‘l’ 접미사가 붙은 리터럴은 사라집니다. [1] [done]
  • 모든 문자열을 Unicode로 만들고 별도의 bytes() 타입을 제공합니다. [1] 새 문자열 타입의 이름은 ‘str’이 됩니다. 자세한 내용은 PEP 3137을 참조하십시오. [done]
  • 원자 타입 메서드에서 적절한 경우 리스트 대신 이터러블 뷰를 반환합니다(예: dict.keys(), dict.values(), dict.items()등). iter* 메서드는 제거됩니다. [done]
  • string.join()이 인자를 문자열화하도록 합니까? [18] [NO]
  • 모드가 잘못된 경우 IOError가 아니라 ValueError를 반환하도록 open()을 수정합니다. [done]

제거 대상:

  • basestring.find()basestring.rfind()를 제거합니다. try/except 블록에서 basestring.index()basestring.[r]partition()또는 basestring.rindex()를 사용하십시오??? [13] [UNLIKELY]
  • file.xreadlines() 메서드 [31] [done]
  • dict.setdefault()? [15] [UNLIKELY]
  • dict.has_key() 메서드. in 연산자를 사용하십시오. [done]
  • list.sort()builtin.sorted() 메서드에서 cmp 매개변수를 제거합니다. [27] [done]

내장 네임스페이스

  • 적절한 경우 내장 함수가 이터레이터를 반환하도록 만듭니다(예: range(), zip(), map(), filter()등). [done]
  • input()을 제거하고 raw_input()의 이름을 input()으로 변경합니다. 이전 input()이 필요하면 eval(input())을 사용하십시오. [done]
  • 인자에 대해 __trunc__() 메서드를 호출하는 trunc()를 도입합니다. 제안된 용도는 __int__()를 호출하면 데이터 손실이 발생하지만 정수 표현은 여전히 필요한 float과 같은 객체입니다? [8] [done]
  • 예외 계층 구조 변경 PEP 352 [done]
  • 정수의 이진 표현을 위한 bin() 함수를 추가합니다. [done]

제거 대상:

  • apply(): 대신 f(*args, **kw)를 사용하십시오. [2] [done]
  • buffer(): 제거해야 합니다(bytes() 타입을 대신 사용하십시오) (?) [2] [done]
  • callable()(호출 가능 객체): 그냥 isinstance(x, collections.Callable)을 사용하십시오 (?) [2] [done]
  • compile(): sys에 넣습니다(또는 자체 모듈에 넣을 수도 있습니다). [2]
  • coerce(): 더 이상 필요하지 않습니다. [2] [done]
  • execfile(), reload(): exec()를 사용하십시오 [2] [done]
  • intern(): sys에 넣으십시오 [2], [22] [done]
  • reduce(): functools에 넣으십시오. 대부분의 경우 루프가 더 읽기 쉽습니다 [2], [9] [done]
  • xrange(): 대신 range()를 사용하십시오 [1] [위의 range() 참조] [done]
  • StandardError: 원래 예외 계층 구조의 유물입니다;
    대신 Exception을 서브클래싱하십시오. [done]

표준 라이브러리

  • 표준 라이브러리를 그렇게 얕지 않도록 재구성합니까?
  • 테스트 코드를 해당하는 곳으로 옮기면, 표준 라이브러리에는 더 이상 test() 함수가 없습니다
  • 모든 테스트를 doctest 또는 unittest를 사용하도록 변환하십시오.
  • 표준 라이브러리 개선 절차는 PEP 3001을 참조하십시오

제거 대상:

  • sets 모듈입니다. [done]
  • 제거할 표준 라이브러리 모듈
    • 소스의 docstring과 주석을 참조하십시오
      • macfs [할 일]
      • new, reconvert, stringold, xmllib, pcre, pypcre, strop [모두 완료]
    • 자세한 내용은 PEP 4를 참조하십시오.
      • buildtools, mimetools, multifile, rfc822, [할 일]
      • mpz, posixfile, regsub, rgbimage, sha, statcache, sv, TERMIOS, timing [완료]
      • cfmfile, gopherlib, md5, MimeWriter, mimify [완료]
      • cl, sets, xreadlines, rotor, whrandom [완료]
    • lib-old의 모든 항목 PEP 4 [완료]
      • Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep, lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse, util, whatsound, whrandom, zmod
  • sys.exitfunc: 대신 atexit 모듈을 사용하십시오 [28], [35] [done]
  • sys.exc_type, sys.exc_values, sys.exc_traceback: 스레드로부터 안전하지 않습니다. sys.exc_info() 또는 예외의 속성을 사용하십시오 [2] [11] [28] [done]
  • sys.exc_clear: Python 3의 except 문이 동일한 기능을 제공합니다 [24] PEP 3110 [28] [done]
  • array.read, array.write [30]
  • operator.isCallable: callable() 내장 함수가 제거되고 있습니다 [29] [36] [done]
  • operator.sequenceIncludes: operator.contains 덕분에 중복됩니다 [29] [36] [done]
  • thread 모듈에서, 잠금 객체의 acquire() 및 release() 메서드에 대한 acquire_lock() 및 release_lock() 별칭입니다. (아마도 항상 threading.py를 사용하도록 thread 모듈을 공용 API에서 제거하기만 하면 됩니다.)
  • XyzMixins를 선호하여 UserXyz 클래스를 사용합니다.
  • Queue.py에서 신뢰할 수 없는 empty() 및 full() 메서드를 제거합니까? [25]
  • random API에서 jumpahead()를 제거합니까? [25]
  • 난수의 기본 요소를 난수 부동 소수가 아니라 난수 바이트를 생성하는 것으로 만듭니까? [25]
  • Cookie.SerialCookie 및 Cookie.SmartCookie를 제거합니까? [25]
  • heapq.heapreplace() API를 수정하여 새 값을 힙의 최상위 값과 비교하도록 합니까? [25]

미해결 문제

  • C99를 요구하여 // 주석과 이름이 지정된 초기화 프로그램을 사용하고, 새로운 스코프를 도입하지 않고 변수를 선언하는 등 여러 이점을 활용할 수 있도록 합니다. (NaN 및 무한대와 같은 IEEE 부동 소수점 문제도 더 잘 지원할 수 있습니까?)
  • BeOS, RISCOS, (SGI) Irix, Tru64를 비롯한 오래된 시스템에 대한 지원을 제거합니다.

참고 자료