본문 바로가기
Python/Python FAQ

Python 항상 xrange()를 range()보다 선호해야 하나요?, Should you always favor xrange() over range()?

by 베타코드 2023. 11. 13.
반응형

질문


왜 그런지 아니면 왜 그렇지 않은지?


답변


성능을 위해서 특히 큰 범위를 반복하는 경우, 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가 변경되지 않은 채로 남아 있습니다.

반응형

댓글