diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index 94159b5d0e6..84924843a39 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -640,6 +640,7 @@ class TestBasicOps(unittest.TestCase): self.assertNotEqual(len(set(map(id, list(product('abc', 'def'))))), 1) def test_repeat(self): + self.assertEqual(list(repeat(object='a', times=3)), ['a', 'a', 'a']) self.assertEqual(lzip(range(3),repeat('a')), [(0, 'a'), (1, 'a'), (2, 'a')]) self.assertEqual(list(repeat('a', 3)), ['a', 'a', 'a']) diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index e2ca9c74b71..48dffe5e6ac 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -3106,11 +3106,10 @@ repeat_new(PyTypeObject *type, PyObject *args, PyObject *kwds) repeatobject *ro; PyObject *element; Py_ssize_t cnt = -1; - - if (type == &repeat_type && !_PyArg_NoKeywords("repeat()", kwds)) - return NULL; - - if (!PyArg_ParseTuple(args, "O|n:repeat", &element, &cnt)) + static char *kwargs[] = {"object", "times", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:repeat", kwargs, + &element, &cnt)) return NULL; if (PyTuple_Size(args) == 2 && cnt < 0) @@ -3178,8 +3177,8 @@ static PyMethodDef repeat_methods[] = { }; PyDoc_STRVAR(repeat_doc, -"repeat(element [,times]) -> create an iterator which returns the element\n\ -for the specified number of times. If not specified, 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 object\n\ endlessly."); static PyTypeObject repeat_type = {