Commit fdf3bd66 authored by Raymond Hettinger's avatar Raymond Hettinger

SF patch #1171417: bug fix for islice() in docs

parent 267b868f
...@@ -250,16 +250,14 @@ by functions or loops that truncate the stream. ...@@ -250,16 +250,14 @@ by functions or loops that truncate the stream.
third line). Equivalent to: third line). Equivalent to:
\begin{verbatim} \begin{verbatim}
def islice(iterable, *args): def islice(iterable, *args):
s = slice(*args) s = slice(*args)
next, stop, step = s.start or 0, s.stop, s.step or 1 it = iter(xrange(s.start or 0, s.stop or sys.maxint, s.step or 1))
for cnt, element in enumerate(iterable): nexti = it.next()
if cnt < next: for i, element in enumerate(iterable):
continue if i == nexti:
if stop is not None and cnt >= stop: yield element
break nexti = it.next()
yield element
next += step
\end{verbatim} \end{verbatim}
If \var{start} is \code{None}, then iteration starts at zero. If \var{start} is \code{None}, then iteration starts at zero.
......
...@@ -265,6 +265,11 @@ class TestBasicOps(unittest.TestCase): ...@@ -265,6 +265,11 @@ class TestBasicOps(unittest.TestCase):
self.assertEqual(list(islice(xrange(10), 2, None)), range(2, 10)) self.assertEqual(list(islice(xrange(10), 2, None)), range(2, 10))
self.assertEqual(list(islice(xrange(10), 1, None, 2)), range(1, 10, 2)) self.assertEqual(list(islice(xrange(10), 1, None, 2)), range(1, 10, 2))
# Test number of items consumed SF #1171417
it = iter(range(10))
self.assertEqual(list(islice(it, 3)), range(3))
self.assertEqual(list(it), range(3, 10))
# Test invalid arguments # Test invalid arguments
self.assertRaises(TypeError, islice, xrange(10)) self.assertRaises(TypeError, islice, xrange(10))
self.assertRaises(TypeError, islice, xrange(10), 1, 2, 3, 4) self.assertRaises(TypeError, islice, xrange(10), 1, 2, 3, 4)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment