[Python-Dev] A macro for easier rich comparisons
Victor Stinner
victor.stinner at gmail.com
Tue Apr 28 11:13:56 CEST 2015
Hi,
2015-04-27 16:02 GMT+02:00 Petr Viktorin <encukou at gmail.com>:
> A macro like this would reduce boilerplate in stdlib and third-party C
> extensions. It would ease porting C extensions to Python 3, where rich
> comparison is mandatory.
It would be nice to have a six module for C extensions. I'm quite sure
that many projects are already full of #ifdef PYTHON3 ... #else ...
#endif macros.
> #define Py_RETURN_RICHCOMPARE(val1, val2, op) \
> do { \
> switch (op) { \
> case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> } \
> Py_RETURN_NOTIMPLEMENTED; \
> } while (0)
I would prefer a function for that:
PyObject *Py_RichCompare(long val1, long2, int op);
You should also handle invalid operator. PyUnicode_RichCompare() calls
PyErr_BadArgument() in this case.
Anyway, please open an issue for this idea.
Victor
More information about the Python-Dev
mailing list