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() 객체에는 이 객체를 좀 더 시퀀스처럼 만들려는, 거의 사용되지 않는 동작이 많이 있습니다. 이러한 동작은 너무나 드물게 사용되어서, 과거에 심각한 버그(예: off-by-one 오류)가 있었는데도 여러 릴리스 동안 발견되지 않았습니다.
저는 사용되지 않는 이러한 기능을 없애는 편이 낫다고 주장합니다. 이렇게 하면 구현, 테스트, 문서화가 단순해지고 유지 보수 부담과 코드 크기가 줄어듭니다.
제안하는 해결책
저는 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.