Skip to content

Commit 06d9a41

Browse files
author
raymond.hettinger
committed
Make sure the itertools filter functions give the same performance for func=bool as func=None.
git-svn-id: http://svn.python.org/projects/python/trunk@61073 6015fed2-1504-0410-9fe1-9d1591cc4771
1 parent 3c1a2ea commit 06d9a41

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

Lib/test/test_itertools.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ def keyfunc(obj):
171171
def test_ifilter(self):
172172
self.assertEqual(list(ifilter(isEven, range(6))), [0,2,4])
173173
self.assertEqual(list(ifilter(None, [0,1,0,2,0])), [1,2])
174+
self.assertEqual(list(ifilter(bool, [0,1,0,2,0])), [1,2])
174175
self.assertEqual(take(4, ifilter(isEven, count())), [0,2,4,6])
175176
self.assertRaises(TypeError, ifilter)
176177
self.assertRaises(TypeError, ifilter, lambda x:x)
@@ -181,6 +182,7 @@ def test_ifilter(self):
181182
def test_ifilterfalse(self):
182183
self.assertEqual(list(ifilterfalse(isEven, range(6))), [1,3,5])
183184
self.assertEqual(list(ifilterfalse(None, [0,1,0,2,0])), [0,0,0])
185+
self.assertEqual(list(ifilterfalse(bool, [0,1,0,2,0])), [0,0,0])
184186
self.assertEqual(take(4, ifilterfalse(isEven, count())), [1,3,5,7])
185187
self.assertRaises(TypeError, ifilterfalse)
186188
self.assertRaises(TypeError, ifilterfalse, lambda x:x)

Modules/itertoolsmodule.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2055,7 +2055,7 @@ ifilter_next(ifilterobject *lz)
20552055
if (item == NULL)
20562056
return NULL;
20572057

2058-
if (lz->func == Py_None) {
2058+
if (lz->func == Py_None || lz->func == PyBool_Type) {
20592059
ok = PyObject_IsTrue(item);
20602060
} else {
20612061
PyObject *good;
@@ -2199,7 +2199,7 @@ ifilterfalse_next(ifilterfalseobject *lz)
21992199
if (item == NULL)
22002200
return NULL;
22012201

2202-
if (lz->func == Py_None) {
2202+
if (lz->func == Py_None || lz->func == PyBool_Type) {
22032203
ok = PyObject_IsTrue(item);
22042204
} else {
22052205
PyObject *good;

0 commit comments

Comments
 (0)