Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0faa1ca

Browse files
committed
Speedup the inner loops for dropwhile(), islice(), ifilter(), and
ifilterfalse().
1 parent bdda9f3 commit 0faa1ca

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

Modules/itertoolsmodule.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -835,10 +835,12 @@ dropwhile_next(dropwhileobject *lz)
835835
PyObject *item, *good;
836836
PyObject *it = lz->it;
837837
long ok;
838+
PyObject *(*iternext)(PyObject *);
838839

840+
assert(PyIter_Check(it));
841+
iternext = *it->ob_type->tp_iternext;
839842
for (;;) {
840-
assert(PyIter_Check(it));
841-
item = (*it->ob_type->tp_iternext)(it);
843+
item = iternext(it);
842844
if (item == NULL)
843845
return NULL;
844846
if (lz->start == 1)
@@ -1170,10 +1172,12 @@ islice_next(isliceobject *lz)
11701172
PyObject *item;
11711173
PyObject *it = lz->it;
11721174
long oldnext;
1175+
PyObject *(*iternext)(PyObject *);
11731176

1177+
assert(PyIter_Check(it));
1178+
iternext = *it->ob_type->tp_iternext;
11741179
while (lz->cnt < lz->next) {
1175-
assert(PyIter_Check(it));
1176-
item = (*it->ob_type->tp_iternext)(it);
1180+
item = iternext(it);
11771181
if (item == NULL)
11781182
return NULL;
11791183
Py_DECREF(item);
@@ -1182,7 +1186,7 @@ islice_next(isliceobject *lz)
11821186
if (lz->stop != -1 && lz->cnt >= lz->stop)
11831187
return NULL;
11841188
assert(PyIter_Check(it));
1185-
item = (*it->ob_type->tp_iternext)(it);
1189+
item = iternext(it);
11861190
if (item == NULL)
11871191
return NULL;
11881192
lz->cnt++;
@@ -1783,10 +1787,12 @@ ifilter_next(ifilterobject *lz)
17831787
PyObject *item;
17841788
PyObject *it = lz->it;
17851789
long ok;
1790+
PyObject *(*iternext)(PyObject *);
17861791

1792+
assert(PyIter_Check(it));
1793+
iternext = *it->ob_type->tp_iternext;
17871794
for (;;) {
1788-
assert(PyIter_Check(it));
1789-
item = (*it->ob_type->tp_iternext)(it);
1795+
item = iternext(it);
17901796
if (item == NULL)
17911797
return NULL;
17921798

@@ -1932,10 +1938,12 @@ ifilterfalse_next(ifilterfalseobject *lz)
19321938
PyObject *item;
19331939
PyObject *it = lz->it;
19341940
long ok;
1941+
PyObject *(*iternext)(PyObject *);
19351942

1943+
assert(PyIter_Check(it));
1944+
iternext = *it->ob_type->tp_iternext;
19361945
for (;;) {
1937-
assert(PyIter_Check(it));
1938-
item = (*it->ob_type->tp_iternext)(it);
1946+
item = iternext(it);
19391947
if (item == NULL)
19401948
return NULL;
19411949

0 commit comments

Comments
 (0)