# HG changeset patch # User Paul Boddie # Date 1481392447 -3600 # Node ID 2eb43643f5eddd59b24753eba21ac5cc8cc7fce6 # Parent 22cf1ce6cfa74975b16025dfef57d84025846f70 Introduced a separate iterator for xrange objects, permitting their re-use. diff -r 22cf1ce6cfa7 -r 2eb43643f5ed lib/__builtins__/span.py --- a/lib/__builtins__/span.py Sat Dec 10 18:52:54 2016 +0100 +++ b/lib/__builtins__/span.py Sat Dec 10 18:54:07 2016 +0100 @@ -71,8 +71,6 @@ else: raise ValueError(self.step) - self.current = self.start - def __len__(self): "Return the length of the range." @@ -83,14 +81,27 @@ "Return an iterator, currently self." - return self + return xrangeiterator(self) + +class xrangeiterator: + + "An iterator over an xrange." + + def __init__(self, obj): + + "Initialise the iterator with the given 'obj'." + + self.start = obj.start + self.end = obj.end + self.step = obj.step + self.current = obj.start def next(self): "Return the next item or raise a StopIteration exception." if self.step < 0 and self.current <= self.end or self.step > 0 and self.current >= self.end: - raise StopIteration() + raise StopIteration current = self.current self.current += self.step