meine bisherigen Gehversuche mit Funktionen in C waren irgendwie einfacher ...
Weiß von euch jemand wie man eine Liste aus Python in ein C-array bugsiert und eine (neue) Liste wieder zurück nach Python? Insbesondere suche ich auch nach einer Möglichkeit verschachtelte Listen in C-arrays (double*) zu konvertieren.
Mein Versuch:
Code: Alles auswählen
#include <Python.h>
static PyObject *_foo(PyObject *self, PyObject *args) {
const double *r;
if (!PyArg_ParseTuple(args, "O", &r))
return NULL;
printf("%f\n", r[0]);
return Py_BuildValue("O", r);
}
static PyMethodDef foo_methods[] = {
{"_foo", _foo, METH_VARARGS},
{NULL, NULL} /* sentinel */
};
PyMODINIT_FUNC initfoo(void)
{
Py_InitModule3("foo", foo_methods,
foo__doc__);
}
Code: Alles auswählen
from distutils.core import setup
from distutils.extension import Extension
c_ext = Extension('foo',
['foo.c'])
setup(
....
ext_modules = [c_ext],
cmdclass = {}
)
Code: Alles auswählen
import foo
if __name__ == "__main__":
print foo._foo([3.0, 2.0])
statt0.000000
[3.0, 2.0]
.3.000000
[3.0, 2.0]
Dumme Frage: Was muß ich stattdessen verwenden, damit es funktioniert?
Motivation: Ich möchte schneller sein als mit pyrex mit seinen permanenten API-calls und ohne ctypes zu verwenden (obwohl ich sooo kurz davor stehe ), weil es die API meines Paketes verkomplizieren würde.
Gruß,
Christian