Your IP : 3.144.31.14


Current Path : /lib64/python2.7/Demo/classes/
Upload File :
Current File : //lib64/python2.7/Demo/classes/Range.pyo

�
V
�Qc@sNdZd�Zd�Zddd��YZd�ZedkrJe�ndS(	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__ .

cCs�y�t|�dkr,dt|d�dfSt|�dkr_t|d�t|d�dfSt|�dkr�|ddkr�td��ntd�|D��Stdt|���Wntk
r�td��nXd	S(
sgTake list of arguments and extract/create proper start, stop, and step
    values and return in a tupleiiiisstep argument must not be zerocss|]}t|�VqdS(N(tint(t.0tx((s*/usr/lib64/python2.7/Demo/classes/Range.pys	<genexpr>ss$range() accepts 1-3 arguments, givensArange() arguments must be numbers or strings representing numbersN(tlenRt
ValueErrorttuplet	TypeError(targlist((s*/usr/lib64/python2.7/Demo/classes/Range.pyt
handleargss!
cgsAt|�\}}}|}x||kr<|V||7}qWdS(s,Function to implement 'range' as a generatorN(R(tatstarttstoptsteptvalue((s*/usr/lib64/python2.7/Demo/classes/Range.pytgenranges
toldrangecBs2eZdZd�Zd�Zd�Zd�ZRS(sClass 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.

    cGsEt|�\|_|_|_td|j|j|j�|_dS(s� Initialize start, stop, and step values along with calculating the
        nubmer of values (what __len__ will return) in the rangeiN(RR
RRtmaxR(tselfR	((s*/usr/lib64/python2.7/Demo/classes/Range.pyt__init__,scCsd|j|j|jfS(s-implement repr(x) which is also used by printsrange(%r, %r, %r)(R
RR(R((s*/usr/lib64/python2.7/Demo/classes/Range.pyt__repr__2scCs|jS(simplement len(x)(R(R((s*/usr/lib64/python2.7/Demo/classes/Range.pyt__len__6scCs>d|ko|jknr1|j|j|Std�dS(simplement x[i]isrange[i] index out of rangeN(RR
Rt
IndexError(Rti((s*/usr/lib64/python2.7/Demo/classes/Range.pyt__getitem__:s(t__name__t
__module__t__doc__RRRR(((s*/usr/lib64/python2.7/Demo/classes/Range.pyR"s
			c
Cs9ddl}ddl}|jddd�}ttddd��}ttddd��}||ksu||kr�td|||f��ndGH|j�}xtd�D]}q�W|j�}xtd�D]}q�W|j�}x|jd�D]}q�W|j�}	||GdGH||Gd	GH|	|Gd
GHdS(Ni����iidisEerror in implementation:
correct   = %s
old-style = %s
generator = %ssTimings for range(1000):i�ssec (old-style class)ssec (generator)ssec (built-in)(ttimet__builtin__trangetlistRRt	Exception(
RRtcorrect_resulttoldrange_resulttgenrange_resulttt1Rtt2tt3tt4((s*/usr/lib64/python2.7/Demo/classes/Range.pyttestBs*

t__main__N((RRRRR'R(((s*/usr/lib64/python2.7/Demo/classes/Range.pyt<module>s