[capi-sig] Getting Numbers in C
Campbell Barton
cbarton at metavr.com
Wed Jul 11 12:58:19 CEST 2007
Iv noticed that theres no one liner way to get a number (double) from a
PyNumber from the C api.
PyFloat_AsDouble - http://www.python.org/doc/api/floatObjects.html
- Does what I want, but only works on PyFloat (and PyInts), not user
implementations of the PyNumber protocol.
PyNumber_Float - http://www.python.org/doc/api/number.html
- does what I need but, returnd a PyFloat that needs to then be passed
to PyFloat_AsDouble,
PyNumber_Float
Id like somthing like PyNumber_AsDouble,
thinking of writing a utility function for this that could read...
/* assumes PyNumber_Check has been tested, should not segfault either way */
double PyNumber_AsDouble(PyObject * value)
{
if (PyFloat_Check(value) || PyInt_Check(value)) {
return PyFloat_AsDouble(value);
} else {
PyObject *pyfloat;
double d;
pyfloat = PyNumber_Float(value);
d = PyNumber_AsDouble(pyfloat);
Py_XDECREF(pyfloat);
return d;
}
}
Using PyNumber_Float for all values would be a bit slower since it needs
to make a new pyfloat each time which is why Id prefer to use
PyFloat_AsDouble where possible.
Wondering if other people would fine something like this useful in the
Py/C api - or if Im missing something.
Thanks
--
Campbell J Barton (ideasman42)
More information about the capi-sig
mailing list