]> granicus.if.org Git - python/commitdiff
Add keyword argument support to itertools.count().
authorRaymond Hettinger <python@rcn.com>
Sat, 14 Feb 2009 04:21:49 +0000 (04:21 +0000)
committerRaymond Hettinger <python@rcn.com>
Sat, 14 Feb 2009 04:21:49 +0000 (04:21 +0000)
Doc/library/itertools.rst
Lib/test/test_itertools.py
Modules/itertoolsmodule.c

index fda3beb67066806cd642006b66fa0aed90c8eb1a..ad5a23bec55c92e2b281cdb9d030cb21f961bb62 100644 (file)
@@ -194,15 +194,16 @@ loops that truncate the stream.
    .. versionadded:: 3.1
 
 
-.. function:: count(n=0, step=1)
+.. function:: count(start=0, step=1)
 
    Make an iterator that returns evenly spaced values starting with *n*. Often
    used as an argument to :func:`map` to generate consecutive data points.
    Also, used with :func:`zip` to add sequence numbers.  Equivalent to::
 
-      def count(n=0, step=1):
+      def count(start=0, step=1):
           # count(10) --> 10 11 12 13 14 ...
           # count(2.5, 0.5) -> 3.5 3.0 4.5 ...
+          n = start
           while True:
               yield n
               n += step
index 31ef2e1578d320e5ac156c220418358d32378d48..812a1efdb48089aafc13349270b7eef15395c4ff 100644 (file)
@@ -355,6 +355,7 @@ class TestBasicOps(unittest.TestCase):
         self.assertEqual(lzip('abc',count(2,3)), [('a', 2), ('b', 5), ('c', 8)])
         self.assertEqual(lzip('abc',count(2,0)), [('a', 2), ('b', 2), ('c', 2)])
         self.assertEqual(lzip('abc',count(2,1)), [('a', 2), ('b', 3), ('c', 4)])
+        self.assertEqual(lzip('abc',count(2,3)), [('a', 2), ('b', 5), ('c', 8)])
         self.assertEqual(take(20, count(maxsize-15, 3)), take(20, range(maxsize-15, maxsize+100, 3)))
         self.assertEqual(take(20, count(-maxsize-15, 3)), take(20, range(-maxsize-15,-maxsize+100, 3)))
         self.assertEqual(take(3, count(2, 3.25-4j)), [2, 5.25-4j, 8.5-8j])
index 75c6e7ed823387abf1d6ff81e0ebed545c68ec52..a44d2ae3db9b120bd1913fb03bef616ce226b677 100644 (file)
@@ -2916,11 +2916,10 @@ count_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
        Py_ssize_t cnt = 0;
        PyObject *long_cnt = NULL;
        PyObject *long_step = NULL;
+       static char *kwlist[] = {"start", "step", 0};
 
-       if (type == &count_type && !_PyArg_NoKeywords("count()", kwds))
-               return NULL;
-
-       if (!PyArg_UnpackTuple(args, "count", 0, 2, &long_cnt, &long_step))
+       if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:count",
+                       kwlist, &long_cnt, &long_step))
                return NULL;
 
        if (long_cnt != NULL && !PyNumber_Check(long_cnt) ||
@@ -3027,10 +3026,10 @@ count_repr(countobject *lz)
 }
 
 PyDoc_STRVAR(count_doc,
-                        "count([firstval[, step]]) --> count object\n\
+                        "count([start[, step]]) --> count object\n\
 \n\
 Return a count object whose .__next__() method returns consecutive\n\
-integers starting from zero or, if specified, from firstval.\n\
+integers starting from zero or, if specified, from start.\n\
 If step is specified, counts by that interval.  Equivalent to:\n\n\
     def count(firstval=0, step=1):\n\
         x = firstval\n\