상세 컨텐츠

본문 제목

230128 TIL

IT/TIL

by lemontiger 2023. 1. 28. 23:43

본문

오늘 한 일

1. range() vs xrange()

 

1. range() vs xrange()

range() 및 xrange()는 Python 의 for 루프에서 특정 횟수만큼 반복하는 데 사용할 수 있는 두 가지 함수.

Python 3에는 xrange가 없지만 range 함수는 Python 2의 xrange처럼 작동.

Python 2와 Python 3 모두에서 실행되는 코드를 작성하려면 range()를 사용해야 함.

1_range()

범위 객체(이터러블 유형)를 반환.

 

2_xrange()

이 함수는 루프를 통해서만 숫자를 표시하는 데 사용할 수 있는 generator 개체를 반환.

유일한 특정 범위는 요청 시 표시되므로 " 지연 평가 "라고 합니다.

 

3_두 함수의 비교 포인트

1) 반환 유형

range()는 범위 객체를 반환. 
xrange()는 – xrange() 객체를 반환. 

# range() vs xrange() 비교 
# 반환 타입 비교

# range() 예시
a = range(1,10000)

# xrange() 예시
x = xrange(1,10000)

# a를 print 해봤을 때
print ("The return type of range() is : ")
print (type(a))

# x를 print 해봤을 때
print ("The return type of xrange() is : ")
print (type(x))

결과

The return type of range() is : 
<type 'list'>
The return type of xrange() is : 
<type 'xrange'>

2) 메모리

range()에 의해 생성된 범위 를 저장 하는 변수는 xrange()를 사용하여 범위를 저장하는 변수에 비해 더 많은 메모리를 차지.

이에 대한 기본적인 이유는 range()의 반환 유형이 list이고 xrange()가 xrange() 객체이기 때문. 

# range() vs xrange() 비교
# memory 비교

import sys

# range() 예시
a = range(1,10000)

# xrange() 예시
x = xrange(1,10000)

# a 크기 테스트
# range()가 더 많은 메모리 사용
print ("The size allotted using range() is : ")
print (sys.getsizeof(a))

# x 크기 테스트
# xrange()가 더 적은 메모리 사용
print ("The size allotted using xrange() is : ")
print (sys.getsizeof(x))

결과

The size allotted using range() is : 
80064
The size allotted using xrange() is : 
40

3) 운영 용도

range()는 목록을 반환하므로 목록에 적용 할 수 있는 모든 작업을 사용할 수 있음.

반면에 xrange()는 xrange 객체를 반환하기 때문에 list와 관련된 작업을 적용 할 수 없는 단점이 있음.

# range() vs xrange() 비교
# 운영 용도 비교

# initializing a with range()
a = range(1,6)

# initializing a with xrange()
x = xrange(1,6)

# range()를 사용하여 슬라이싱한 후의 목록 테스트
# 오류 없이 print 함
print ("The list after slicing using range is : ")
print (a[2:5])

# xrange()를 사용하여 슬라이싱한 후의 목록 테스트
# 오류를 발생
print ("The list after slicing using xrange is : ")
print (x[2:5])

오류(xrange())

Traceback (most recent call last):
  File "1f2d94c59aea6aed795b05a19e44474d.py", line 18, in 
    print (x[2:5])
TypeError: sequence index must be integer, not 'slice'

결과(range())

The list after slicing using range is : 
[3, 4, 5]
The list after slicing using xrange is :

4) 속도

xrange()는 지연 평가에 필요한 값만 포함하는 generator 객체만 평가하므로 range()보다 구현 이 더 빠름.

range() xrange()
정수목록을 반환 generator 객체를 반환
실행 속도가 느림 실행 속도가 빠름
전체 요소 list를 메모리에 유지하기 때문에 많은 메모리 사용 한 번에 하나의 요소만 메모리에 유지하기 때문에 적은 메모리 사용
list를 반환하기 때문에 산술연산이 가능 산술 연산이 불가능
python3에서는 xrange() 지원 불가능 python 2에서는 xrange()는 for 루프를 반복하는데 사용

참고 링크:

https://www.geeksforgeeks.org/range-vs-xrange-in-python/

 

range() vs xrange() in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

'IT > TIL' 카테고리의 다른 글

230130 TIL  (0) 2023.01.31
230129 TIL  (0) 2023.01.29
220127 TIL  (0) 2023.01.27
220126 TIL  (0) 2023.01.26
220125 TIL  (0) 2023.01.25

관련글 더보기

댓글 영역