extending questions
Bernhard Herzog
herzog at online.de
Mon Apr 12 18:02:04 EDT 1999
"Michael P. Reilly" <arcege at shore.net> writes:
> Jim Meier <fatjim at home.com> wrote:
> : Firstly, I'm looking for a quick and easy way for a PyCFunction to
> : accept as an argument either an integer or a floating point number, so
> : that the function can be called as
>
> : func(1,1,1)
>
> : or as
>
> : func(0.5,0,2/3)
>
> : because python doesn't seem to let me consider an integer as a float.
> : I've tried using some of the conversion functions in the abstract
> : numeric suite and the PyFloat_GetDouble (or some similar name), but with
> : no luck - it always returned -1 for me. Any ideas?
>
> My best suggestion would be to use the PyInt_Check and PyFloat_check
> functions.
>
> PyObject *func(PyObject *self, PyObject *args)
> { PyObject *arg1, *arg2, *arg3;
> double a1, a2, a3;
>
> if (!PyArg_ParseTuple(args, "OOO", &arg1, &arg2, &arg3))
> return NULL;
> /* get the double from the first argument */
> #define py_to_double(a, var) \
> if (PyInt_Check(a)) (var) = (double)PyInt_AS_LONG(a); \
> else if (PyFloat_Check(a)) (var) = PyFloat_AS_DOUBLE(a); \
> else { PyErr_SetString(PyExc_TypeError, "must supply a number"); \
> return NULL; }
>
> py_to_double(arg1, a1);
> py_to_double(arg2, a2);
> py_to_double(arg3, a3);
> #undef py_to_double
Why not just
PyObject *
func(PyObject *self, PyObject *args)
{
double a1, a2, a3;
if (!PyArg_ParseTuple(args, "ddd", &a1, &a2, &a3))
return NULL;
/* ... */
}
This should work for Python floats, int and longs.
--
Bernhard Herzog | Sketch, a python based drawing program
herzog at online.de | http://www.online.de/home/sketch/
More information about the Python-list
mailing list