[Python-checkins] r69604 - in python/trunk: Doc/library/itertools.rst Lib/test/test_itertools.py Modules/itertoolsmodule.c

raymond.hettinger python-checkins at python.org
Sat Feb 14 01:25:56 CET 2009


Author: raymond.hettinger
Date: Sat Feb 14 01:25:51 2009
New Revision: 69604
Log:
Add keyword argument support to itertools.count().
Modified:
 python/trunk/Doc/library/itertools.rst
 python/trunk/Lib/test/test_itertools.py
 python/trunk/Modules/itertoolsmodule.c
Modified: python/trunk/Doc/library/itertools.rst
==============================================================================
--- python/trunk/Doc/library/itertools.rst	(original)
+++ python/trunk/Doc/library/itertools.rst	Sat Feb 14 01:25:51 2009
@@ -200,20 +200,20 @@
 .. 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.
 
Modified: python/trunk/Lib/test/test_itertools.py
==============================================================================
--- python/trunk/Lib/test/test_itertools.py	(original)
+++ python/trunk/Lib/test/test_itertools.py	Sat Feb 14 01:25:51 2009
@@ -347,6 +347,8 @@
 
 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)))
Modified: python/trunk/Modules/itertoolsmodule.c
==============================================================================
--- python/trunk/Modules/itertoolsmodule.c	(original)
+++ python/trunk/Modules/itertoolsmodule.c	Sat Feb 14 01:25:51 2009
@@ -3233,11 +3233,10 @@
 	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 @@
 }
 
 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\


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /