]> granicus.if.org Git - python/commitdiff
The previous made the stop argument optional.
authorRaymond Hettinger <python@rcn.com>
Fri, 2 May 2003 19:44:20 +0000 (19:44 +0000)
committerRaymond Hettinger <python@rcn.com>
Fri, 2 May 2003 19:44:20 +0000 (19:44 +0000)
It is better to be explicit and just allow stop to be None.

Doc/lib/libitertools.tex
Lib/test/test_itertools.py
Modules/itertoolsmodule.c

index d0e12696c169051145cb0df176451fb667a48550..f291fe34b2d20431a2f86f61920dfd46ae22cbc8 100644 (file)
@@ -197,9 +197,9 @@ by functions or loops that truncate the stream.
   If \var{start} is non-zero, then elements from the iterable are skipped
   until start is reached.  Afterward, elements are returned consecutively
   unless \var{step} is set higher than one which results in items being
-  skipped.  If \var{stop} is not specified or is \code{None}, then iteration
-  continues indefinitely; otherwise, it stops at the specified position.
-  Unlike regular slicing,
+  skipped.  If \var{stop} is \code{None}, then iteration continues until
+  the iterator is exhausted, if at all; otherwise, it stops at the specified
+  position.  Unlike regular slicing,
   \function{islice()} does not support negative values for \var{start},
   \var{stop}, or \var{step}.  Can be used to extract related fields
   from data where the internal structure has been flattened (for
@@ -208,13 +208,10 @@ by functions or loops that truncate the stream.
 
   \begin{verbatim}
      def islice(iterable, *args):
-         if args:
-             s = slice(*args)
-             next = s.start or 0
-             stop = s.stop
-             step = s.step or 1
-         else:
-             next, stop, step = 0, None, 1
+         s = slice(*args)
+         next = s.start or 0
+         stop = s.stop
+         step = s.step or 1
          for cnt, element in enumerate(iterable):
              if cnt < next:
                  continue
index d0b1ce80b9ed2c43ab70422cbd7f21fc78208cc8..ef2ab26ae585bc27c34f3411839d3fa00a4002b5 100644 (file)
@@ -78,12 +78,12 @@ class TestBasicOps(unittest.TestCase):
             self.assertEqual(list(islice(xrange(100), *args)), range(*tgtargs))
 
         # Test stop=None
-        self.assertEqual(list(islice(xrange(10))), range(10))
         self.assertEqual(list(islice(xrange(10), None)), range(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))
 
         # Test invalid arguments
+        self.assertRaises(TypeError, islice, xrange(10))
         self.assertRaises(TypeError, islice, xrange(10), 1, 2, 3, 4)
         self.assertRaises(ValueError, islice, xrange(10), -5, 10, 1)
         self.assertRaises(ValueError, islice, xrange(10), 1, -5, -1)
index f05ebd6beebabcaeb0f9032955842726497bfce8..2d496b5c582d2fe80499f8af2f1810219f7f90d4 100644 (file)
@@ -477,7 +477,7 @@ islice_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
        isliceobject *lz;
 
        numargs = PyTuple_Size(args);
-       if (!PyArg_ParseTuple(args, "O|OOl:islice", &seq, &a1, &a2, &step))
+       if (!PyArg_ParseTuple(args, "OO|Ol:islice", &seq, &a1, &a2, &step))
                return NULL;
 
        if (numargs == 2) {
@@ -491,7 +491,7 @@ islice_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
                                return NULL;
                        }
                }
-       } else if (numargs == 3 || numargs == 4) {
+       } else {
                start = PyInt_AsLong(a1);
                if (start == -1 && PyErr_Occurred()) {
                        PyErr_Clear();