반응형
질문
왜 그런지 아니면 왜 그렇지 않은지?
답변
성능을 위해서 특히 큰 범위를 반복하는 경우, xrange()
가 일반적으로 더 좋습니다. 그러나 여전히 몇 가지 경우에는 range()
를 선호할 수 있습니다:
파이썬 3에서
range()
는 예전에xrange()
가 하던 일을 하고,xrange()
는 존재하지 않습니다. Python 2와 Python 3에서 모두 실행될 코드를 작성하려면xrange()
를 사용할 수 없습니다.일부 경우에는
range()
가 실제로 더 빠를 수 있습니다. 예를 들어, 동일한 시퀀스를 여러 번 반복하는 경우입니다.xrange()
는 매번 정수 객체를 재구성해야 하지만,range()
는 실제 정수 객체를 가지고 있을 것입니다. (그러나 메모리 관점에서는 항상 더 나쁜 성능을 보일 것입니다)xrange()
는 실제 리스트가 필요한 모든 경우에 사용할 수 없습니다. 예를 들어, 슬라이스나 리스트의 다른 메소드를 지원하지 않습니다.
[편집] 몇 가지 게시물에서는 range()
가 2to3 도구에 의해 업그레이드될 것이라고 언급되었습니다. 기록을 남기기 위해 range()
와 xrange()
의 일부 샘플 사용법을 도구에서 실행한 결과를 아래에 표시합니다.
RefactoringTool: 암시적 fixer 건너뛰기: buffer
RefactoringTool: 암시적 fixer 건너뛰기: idioms
RefactoringTool: 암시적 fixer 건너뛰기: ws_comma
--- range_test.py (원본)
+++ range_test.py (리팩토링됨)
@@ -1,7 +1,7 @@
for x in range(20):
- a=range(20)
+ a=list(range(20))
b=list(range(20))
c=[x for x in range(20)]
d=(x for x in range(20))
- e=xrange(20)
+ e=range(20)
보시다시피, for 루프나 컴프리헨션에서 사용하거나 이미 list()로 래핑된 경우에는 range가 변경되지 않은 채로 남아 있습니다.
반응형
댓글