???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................ó
¿œ^c           @   sN   d  Z  d „  Z d „  Z d d d „  ƒ  YZ d „  Z e d k rJ e ƒ  n  d S(	   s  Example of a generator: re-implement the built-in range function
without actually constructing the list of values.

OldStyleRange is coded in the way required to work in a 'for' loop before
iterators were introduced into the language; using __getitem__ and __len__ .

c         C   sÞ   yº t  |  ƒ d k r, d t |  d ƒ d f St  |  ƒ d k r_ t |  d ƒ t |  d ƒ d f St  |  ƒ d k r¤ |  d d k r t d ƒ ‚ n  t d „  |  Dƒ ƒ St d t  |  ƒ ƒ ‚ Wn t k
 rÙ t d ƒ ‚ n Xd	 S(
   sg   Take list of arguments and extract/create proper start, stop, and step
    values and return in a tuplei   i    i   i   s   step argument must not be zeroc         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   int(   t   .0t   x(    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pys	   <genexpr>   s    s$   range() accepts 1-3 arguments, givensA   range() arguments must be numbers or strings representing numbersN(   t   lenR    t
   ValueErrort   tuplet	   TypeError(   t   arglist(    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt
   handleargs   s    !c          g   sA   t  |  ƒ \ } } } | } x | | k  r< | V| | 7} q Wd S(   s,   Function to implement 'range' as a generatorN(   R   (   t   at   startt   stopt   stept   value(    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   genrange   s
    t   oldrangec           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s  Class implementing a range object.
    To the user the instances feel like immutable sequences
    (and you can't concatenate or slice them)

    Done using the old way (pre-iterators; __len__ and __getitem__) to have an
    object be used by a 'for' loop.

    c         G   sE   t  | ƒ \ |  _ |  _ |  _ t d |  j |  j |  j ƒ |  _ d S(   s„    Initialize start, stop, and step values along with calculating the
        nubmer of values (what __len__ will return) in the rangei    N(   R   R
   R   R   t   maxR   (   t   selfR	   (    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   __init__,   s    c         C   s   d |  j  |  j |  j f S(   s-   implement repr(x) which is also used by prints   range(%r, %r, %r)(   R
   R   R   (   R   (    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   __repr__2   s    c         C   s   |  j  S(   s   implement len(x)(   R   (   R   (    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   __len__6   s    c         C   s>   d | k o |  j  k n r1 |  j |  j | St d ‚ d S(   s   implement x[i]i    s   range[i] index out of rangeN(   R   R
   R   t
   IndexError(   R   t   i(    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   __getitem__:   s    (   t   __name__t
   __module__t   __doc__R   R   R   R   (    (    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyR   "   s
   			c    
      C   s9  d d  l  }  d d  l } | j d d d ƒ } t t d d d ƒ ƒ } t t d d d ƒ ƒ } | | k su | | k r‘ t d | | | f ƒ ‚ n  d GH|  j  ƒ  } x t d ƒ D] } q¯ W|  j  ƒ  } x t d ƒ D] } qÒ W|  j  ƒ  } x | j d ƒ D] } qø W|  j  ƒ  }	 | | Gd GH| | Gd	 GH|	 | Gd
 GHd  S(   Niÿÿÿÿi   id   i   sE   error in implementation:
correct   = %s
old-style = %s
generator = %ss   Timings for range(1000):iè  s   sec (old-style class)s   sec (generator)s   sec (built-in)(   t   timet   __builtin__t   ranget   listR   R   t	   Exception(
   R   R   t   correct_resultt   oldrange_resultt   genrange_resultt   t1R   t   t2t   t3t   t4(    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   testB   s*    t   __main__N(    (   R   R   R   R   R'   R   (    (    (    s*   /usr/lib64/python2.7/Demo/classes/Range.pyt   <module>   s   		 	