Add keyword argument support to itertools.count().

This commit is contained in:
Raymond Hettinger 2009-02-14 00:25:51 +00:00
parent 544c3e19e6
commit a4038038c6
3 changed files with 10 additions and 9 deletions

View File

@ -200,20 +200,20 @@ loops that truncate the stream.
.. versionadded:: 2.7
.. 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:`imap` to generate consecutive data points.
Also, used with :func:`izip` 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
.. versionchanged:: 2.7
added *step* argument and allowed non-integer arguments.

View File

@ -347,6 +347,8 @@ class TestBasicOps(unittest.TestCase):
def test_count_with_stride(self):
self.assertEqual(zip('abc',count(2,3)), [('a', 2), ('b', 5), ('c', 8)])
self.assertEqual(zip('abc',count(start=2,step=3)),
[('a', 2), ('b', 5), ('c', 8)])
self.assertEqual(zip('abc',count(2,0)), [('a', 2), ('b', 2), ('c', 2)])
self.assertEqual(zip('abc',count(2,1)), [('a', 2), ('b', 3), ('c', 4)])
self.assertEqual(take(20, count(maxsize-15, 3)), take(20, range(maxsize-15, maxsize+100, 3)))

View File

@ -3233,11 +3233,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) ||
@ -3353,10 +3352,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\