Python - xrange(), 순차적인 숫자를 만들 수 있는 generator를 생성하는 클래스
xrange
>>> xrange(stop)
>>> xrange(start, stop[, step])
전달받은 인자를 바탕으로 순차적인 숫자를 만들 수 있는 generator를 생성한다.
기본적인 사용법은 [range 함수] 와 동일하다.
하지만 range 함수는 미리 숫자를 생성하여 list 형태로 메모리에 미리 올려 놓는 반면 xrange 함수는 실제로 사용을 요청받았을 때 숫자를 생성한다.
range 함수와는 다르게 불필요하게 메모리에 생성하지 않는다는 장점이 있다.
xrange 함수가 리턴하는 형태는 xrange type이다.
xrange type은 immutable sequence 로 일반적으로 반복문에 사용된다.
xrange type의 장점은 range와는 상관없이 xrange object 자체 크기만큼만 메모리를 사용한다는 점이다. (성능상의 이점은 없음)
__builtin__ module에 포함된 class 이다.
xrange 함수 사용 예)
>>> xrange(10) xrange(10) >>> xrange(1,10) xrange(1, 10) >>> xrange(1,10,2) xrange(1, 11, 2) >>> xrange(10,1,-2) xrange(10, 0, -2) >>> xrange(0) xrange(0)
step이 0일 경우
>>> xrange(1,10,0) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: xrange() arg 3 must not be zero
xrange가 반환하는 형식 확인
>>> type(xrange(10)) <type 'xrange'>
>>> help(xrange)
Help on class xrange in module __builtin__:
class xrange(object)
| xrange(stop) -> xrange object
| xrange(start, stop[, step]) -> xrange object
|
| Like range(), but instead of returning a list, returns an object that
| generates the numbers in the range on demand. For looping, this is
| slightly faster than range() and more memory efficient.
|
| Methods defined here:
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __getitem__(...)
| x.__getitem__(y) <==> x[y]
|
| __iter__(...)
| x.__iter__() <==> iter(x)
|
| __len__(...)
| x.__len__() <==> len(x)
|
| __reduce__(...)
|
| __repr__(...)
| x.__repr__() <==> repr(x)
|
| __reversed__(...)
| Returns a reverse iterator.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __new__ = <built-in method __new__ of type object>
| T.__new__(S, ...) -> a new object with type S, a subtype of T