PEP 260 – xrange() 간소화
- Author:
- Guido van Rossum <guido at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 26-Jun-2001
- Python-Version:
- 2.2
- Post-History:
- 26-Jun-2001
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 xrange() 객체에서 x[i:j] 및 x*n과 같은 일부 드물게 사용되는 동작을 제거할 것을 제안합니다.
문제
xrange() 함수에는 관용적인 용도가 하나 있습니다.:
for i in xrange(...): ...
그러나 xrange() 객체에는 시퀀스와 더 유사하게 만들려고 하는, 드물게 사용되는 동작이 많이 있습니다. 이러한 동작은 매우 드물게 사용되므로, 역사적으로 여러 릴리스 동안 발견되지 않은 심각한 버그(예: 오프바이원 오류)가 있었습니다.
저는 이러한 사용되지 않는 기능을 제거하는 편이 낫다고 주장합니다. 이렇게 하면 구현, 테스트 및 문서화가 단순해지고, 유지 관리 부담과 코드 크기가 줄어듭니다.
제안하는 해결책
xrange() 객체를 최소한으로 축소할 것을 제안합니다. 유지되는 유일한 시퀀스 동작은 x[i], len(x) 및 repr(x)뿐입니다. 특히 다음 동작은 제거됩니다.
x[i:j](슬라이싱)x*n,n*x(시퀀스 반복)cmp(x1, x2)(비교)i in x(포함 검사)x.tolist()메서드x.start,x.stop,x.step속성
저는 또한 PyRange_New() C API의 시그니처를 변경하여 네 번째 인자(반복 횟수)를 제거할 것을 제안합니다.
사용자 정의 이터레이터 타입을 구현하면 일반적인 사용에서 속도를 높일 수 있지만, 이는 선택 사항입니다(기본 시퀀스 이터레이터로도 충분합니다).
범위
이 PEP는 xrange() 내장 함수와 PyRange_New() C API에 영향을 미칩니다.
위험
누군가의 코드가 확장된 코드에 의존하고 있을 수 있으며, 이 경우 해당 코드는 깨질 것입니다. 하지만 역사적으로 확장된 코드의 버그가 그렇게 오랫동안 발견되지 않았던 것을 고려하면, 영향을 받는 코드가 많지는 않을 것 같습니다.
전환
하위 호환성을 위해 기존 기능은 Python 2.2에서도 여전히 존재하겠지만, 경고를 발생시킬 것입니다. Python 2.2 최종판이 릴리스된 지 1년 후(아마도 2.4에서) 해당 기능은 제거될 것입니다.
Copyright
This document has been placed in the public domain.