From 2e2909f58482f5c780c58549f04f7cf325b94e02 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 19 Feb 2009 02:15:14 +0000 Subject: [PATCH] Add keyword arg support to itertools.compress(). --- Lib/test/test_itertools.py | 1 + Modules/itertoolsmodule.c | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index a33939eb20f..2cdb1d7dc0b 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -306,6 +306,7 @@ class TestBasicOps(unittest.TestCase): self.assertEqual(comb, sorted(set(cwr) & set(perm))) # comb: both a cwr and a perm def test_compress(self): + self.assertEqual(list(compress(data='ABCDEF', selectors=[1,0,1,0,1,1])), list('ACEF')) self.assertEqual(list(compress('ABCDEF', [1,0,1,0,1,1])), list('ACEF')) self.assertEqual(list(compress('ABCDEF', [0,0,0,0,0,0])), list('')) self.assertEqual(list(compress('ABCDEF', [1,1,1,1,1,1])), list('ABCDEF')) diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index fefcbfb230e..3c6d618bc1d 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -2782,11 +2782,9 @@ compress_new(PyTypeObject *type, PyObject *args, PyObject *kwds) PyObject *seq1, *seq2; PyObject *data=NULL, *selectors=NULL; compressobject *lz; - - if (type == &compress_type && !_PyArg_NoKeywords("compress()", kwds)) - return NULL; - - if (!PyArg_UnpackTuple(args, "compress", 2, 2, &seq1, &seq2)) + static char *kwargs[] = {"data", "selectors", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO:compress", kwargs, &seq1, &seq2)) return NULL; data = PyObject_GetIter(seq1); @@ -2864,7 +2862,7 @@ compress_next(compressobject *lz) } PyDoc_STRVAR(compress_doc, -"compress(data sequence, selector sequence) --> iterator over selected data\n\ +"compress(data, selectors) --> iterator over selected data\n\ \n\ Return data elements corresponding to true selector elements.\n\ Forms a shorter iterator from selected data elements using the\n\