[Alex] > And I'm on the fence regarding the specific issue of PySet_Next. > > So, having carefully staked out a position smack in the middle, I > cheerfully now expect to be fired upon from both sides!-)
Okay, here's the first cheap shot ;-) Which of the following pieces of code is preferable? The first loops with the iterator protocol and the second loops with the _next protocol. static long frozenset_hash(PyObject *self) { PySetObject *so = (PySetObject *)self; long h, hash = 0; PyObject *it, *key; if (so->hash != -1) return so->hash; it = PyObject_GetIter(self); if (it == NULL) return -1; while ((key = PyIter_Next(it)) != NULL) { h = PyObject_Hash(key); Py_DECREF(key); if (h == -1) { Py_DECREF(it); return -1; } hash ^= h * 3644798167; } Py_DECREF(it); if (PyErr_Occurred()) return -1; if (hash == -1) hash = 590923713L; so->hash = hash; return hash; } static long frozenset_hash(PyObject *self) { PySetObject *so = (PySetObject *)self; long h, hash = 0; PyObject *key; Py_ssize_t pos = 0; if (so->hash != -1) return so->hash; while (set_next(so, &pos, &key)) { h = PyObject_Hash(key); if (h == -1) { return -1; } hash ^= h * 3644798167; } if (hash == -1) hash = 590923713L; so->hash = hash; return hash; } _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com