38 lines
		
	
	
		
			981 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			981 B
		
	
	
	
		
			Python
		
	
	
	
| from __future__ import generators
 | |
| try:
 | |
|     reversed = reversed
 | |
| except NameError:
 | |
| 
 | |
|     def reversed(sequence):
 | |
|         """reversed(sequence) -> reverse iterator over values of the sequence
 | |
| 
 | |
|         Return a reverse iterator
 | |
|         """
 | |
|         if hasattr(sequence, '__reversed__'):
 | |
|             return sequence.__reversed__()
 | |
|         if not hasattr(sequence, '__getitem__'):
 | |
|             raise TypeError("argument to reversed() must be a sequence")
 | |
|         return reversed_iterator(sequence)
 | |
| 
 | |
| 
 | |
|     class reversed_iterator(object):
 | |
| 
 | |
|         def __init__(self, seq):
 | |
|             self.seq = seq
 | |
|             self.remaining = len(seq)
 | |
| 
 | |
|         def __iter__(self):
 | |
|             return self
 | |
| 
 | |
|         def next(self):
 | |
|             i = self.remaining
 | |
|             if i > 0:
 | |
|                 i -= 1
 | |
|                 item = self.seq[i]
 | |
|                 self.remaining = i
 | |
|                 return item
 | |
|             raise StopIteration
 | |
| 
 | |
|         def __length_hint__(self):
 | |
|             return self.remaining
 |