Language/Python

Python - xrange(), 순차적인 숫자를 만들 수 있는 generator를 생성하는 클래스

TechNote.kr 2018. 1. 3. 17:02
728x90


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






728x90