[Python-checkins] bpo-42161: Micro-optimize _collections._count_elements() (GH-23008)

vstinner webhook-mailer at python.org
Tue Oct 27 17:24:42 EDT 2020


https://github.com/python/cpython/commit/35b95aaf21534e4a8e3370dfd6f7482265316c9e
commit: 35b95aaf21534e4a8e3370dfd6f7482265316c9e
branch: master
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2020年10月27日T22:24:33+01:00
summary:
bpo-42161: Micro-optimize _collections._count_elements() (GH-23008)
Move the _PyLong_GetOne() call outside the fast-path loop.
files:
M Modules/_collectionsmodule.c
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 8990071f519ea..157875067635a 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -2278,6 +2278,7 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
 PyObject *dict_get;
 PyObject *mapping_setitem;
 PyObject *dict_setitem;
+ PyObject *one = _PyLong_GetOne(); // borrowed reference
 
 it = PyObject_GetIter(iterable);
 if (it == NULL)
@@ -2324,10 +2325,10 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
 if (oldval == NULL) {
 if (PyErr_Occurred())
 goto done;
- if (_PyDict_SetItem_KnownHash(mapping, key, _PyLong_GetOne(), hash) < 0)
+ if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) < 0)
 goto done;
 } else {
- newval = PyNumber_Add(oldval, _PyLong_GetOne());
+ newval = PyNumber_Add(oldval, one);
 if (newval == NULL)
 goto done;
 if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) < 0)
@@ -2336,13 +2337,13 @@ _collections__count_elements_impl(PyObject *module, PyObject *mapping,
 }
 Py_DECREF(key);
 }
- } else {
+ }
+ else {
 bound_get = _PyObject_GetAttrId(mapping, &PyId_get);
 if (bound_get == NULL)
 goto done;
 
 PyObject *zero = _PyLong_GetZero(); // borrowed reference
- PyObject *one = _PyLong_GetOne(); // borrowed reference
 while (1) {
 key = PyIter_Next(it);
 if (key == NULL)


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /