bpo-34303: Micro-optimizations in functools.reduce() (GH-8598)

This commit is contained in:
Sergey Fedoseev 2019-06-02 01:32:18 +05:00 committed by Raymond Hettinger
parent 3b57f50efc
commit e5f6207ba6
2 changed files with 8 additions and 3 deletions

View File

@ -0,0 +1,2 @@
Performance of :func:`functools.reduce` is slightly improved. Patch by
Sergey Fedoseev.

View File

@ -626,10 +626,13 @@ functools_reduce(PyObject *self, PyObject *args)
if (result == NULL)
result = op2;
else {
PyTuple_SetItem(args, 0, result);
PyTuple_SetItem(args, 1, op2);
if ((result = PyEval_CallObject(func, args)) == NULL)
/* Update the args tuple in-place */
assert(args->ob_refcnt == 1);
Py_XSETREF(_PyTuple_ITEMS(args)[0], result);
Py_XSETREF(_PyTuple_ITEMS(args)[1], op2);
if ((result = PyObject_Call(func, args, NULL)) == NULL) {
goto Fail;
}
}
}