Edit File: Range.pyc
� ��^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��|���Vq�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���