Add keyword arg support to itertools.repeat().

This commit is contained in:
Raymond Hettinger 2009-02-19 02:38:25 +00:00
parent 2e2909f584
commit 182edaefb5
2 changed files with 7 additions and 7 deletions

View File

@ -632,6 +632,7 @@ def product2(*args, **kwds):
self.assertNotEqual(len(set(map(id, list(product('abc', 'def'))))), 1) self.assertNotEqual(len(set(map(id, list(product('abc', 'def'))))), 1)
def test_repeat(self): def test_repeat(self):
self.assertEqual(list(repeat(object='a', times=3)), ['a', 'a', 'a'])
self.assertEqual(zip(xrange(3),repeat('a')), self.assertEqual(zip(xrange(3),repeat('a')),
[(0, 'a'), (1, 'a'), (2, 'a')]) [(0, 'a'), (1, 'a'), (2, 'a')])
self.assertEqual(list(repeat('a', 3)), ['a', 'a', 'a']) self.assertEqual(list(repeat('a', 3)), ['a', 'a', 'a'])

View File

@ -3617,11 +3617,10 @@ repeat_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
repeatobject *ro; repeatobject *ro;
PyObject *element; PyObject *element;
Py_ssize_t cnt = -1; Py_ssize_t cnt = -1;
static char *kwargs[] = {"object", "times", NULL};
if (type == &repeat_type && !_PyArg_NoKeywords("repeat()", kwds))
return NULL; if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:repeat", kwargs,
&element, &cnt))
if (!PyArg_ParseTuple(args, "O|n:repeat", &element, &cnt))
return NULL; return NULL;
if (PyTuple_Size(args) == 2 && cnt < 0) if (PyTuple_Size(args) == 2 && cnt < 0)
@ -3699,8 +3698,8 @@ static PyMethodDef repeat_methods[] = {
}; };
PyDoc_STRVAR(repeat_doc, PyDoc_STRVAR(repeat_doc,
"repeat(element [,times]) -> create an iterator which returns the element\n\ "repeat(object [,times]) -> create an iterator which returns the object\n\
for the specified number of times. If not specified, returns the element\n\ for the specified number of times. If not specified, returns the object\n\
endlessly."); endlessly.");
static PyTypeObject repeat_type = { static PyTypeObject repeat_type = {