Cómo pasar dict en python como parámetro a la función c en .so para lograr una llamada interactiva de python-C
#include?lt;stdlib.hgt;
#include?lt;Python.hgt;
¿estático? ¿PyObject?*
wmf_ reverse(PyObject?*self, ?PyObject?*args, ?PyObject?*kwargs)?{
estático?{"nombre",?NULL};
char?*name?=?NULL;
PyObject?*retval?=?NULL;?
//?Pregunta 1:?Toma solo uno Cadena, el formato debe ser "s"
/?gt;gt;gt;?if(PyArg_ParseTupleAndKeywords(args,keyds, "isi",kwlist,amp;name))
if(PyArg_ParseTupleAndKeywords(args,?kwargs,?"s",?kwlist,?&name))?{
retval?=?(PyObject?*)Py_BuildValue("i", 1) ;
printf("s\n",?name);
//?Pregunta 2: Sin autorización
/? gt; gratis(nombre);?
}?else?{
retval?=?(PyObject?*)Py_BuildValue("i", 0);
}
return?retval;
}?
static?PyMethodDef
wmf_methods[] =?{
p>{"reverse",(PyCFunction)wmf_reverse,?METH_VARARGS?|?METH_KEYWORDS,?"reverse"},//?Pregunta 3: La tabla de definición de métodos debe terminar con un registro vacío.
{NULL,?NULL,?0,?NULL},
};
//?Pregunta 4: Módulo no definido
static?struct?PyModuleDef
wmf_module?=?{
PyModuleDef_HEAD_INIT,
"wmf",?/* nombre del módulo*/
NULL, /* Documentación del módulo, puede ser NULL */
-1, ?/* -1 si el módulo guarda el estado en variables globales. */
wmf_methods,
};
//? Pregunta 5: La función de entrada debe declararse como: PyMODINIT_FUNC
PyMODINIT_FUNC
p>PyInit_wmf(void)?{
//?Pregunta 6: Py_InitModule se usa para inicializar el módulo, no un método. Entonces pasar la definición del método es incorrecto.
//?Además, python2.x usa Py_Init_module y python3.x cambia a PyModule_Create.
//?Existen diferencias sutiles entre los dos, preste atención. Aquí estoy usando python3.x.
// Py_InitModule("wmf", ExtestMethods);
PyObject?*m;
m?=? (amp; wmf_module);
si?{
regresar?NULL;
}
regresar?