#include?<stdlib.h>
#include?<Python.h>
static?PyObject?*
wmf_reverse(PyObject?*self,?PyObject?*args,?PyObject?*kwargs)?{?
static?char*?kwlist[]?=?{"name",?NULL};
char?*name?=?NULL;
PyObject?*retval?=?NULL;?
//?問題1:?只取壹個字符串,format應該是"s"
//?>>>?if(PyArg_ParseTupleAndKeywords(args,keyds,"isi",kwlist,&name))
if?(PyArg_ParseTupleAndKeywords(args,?kwargs,?"s",?kwlist,?&name))?{
retval?=?(PyObject?*)Py_BuildValue("i",1);
printf("%s\n",?name);
//?問題2:不要釋放
//?>>>?free(name);?
}?else?{
retval?=?(PyObject?*)Py_BuildValue("i",0);
}
return?retval;
}?
static?PyMethodDef
wmf_methods[]?=?{
{"reverse",(PyCFunction)wmf_reverse,?METH_VARARGS?|?METH_KEYWORDS,?"reverse"},
//?問題3:方法定義表,應該用壹條空記錄來表示結束。
{NULL,?NULL,?0,?NULL},
};
//?問題4:沒有定義module
static?struct?PyModuleDef
wmf_module?=?{
PyModuleDef_HEAD_INIT,
"wmf",?/*?name?of?module?*/
NULL,/*?module?documentation,?may?be?NULL?*/
-1,?/*?size?of?per-interpreter?state?of?the?module,
or?-1?if?the?module?keeps?state?in?global?variables.?*/wmf_methods,
};
//?問題5:入口函數要聲明為:PyMODINIT_FUNC
PyMODINIT_FUNC
PyInit_wmf(void)?{
//?問題6:Py_InitModule要初始化的是模塊,不是方法。所以傳方法定義是錯誤的。
//?另外,python2.x是用Py_Init_module,python3.x改用PyModule_Create了。
//?兩者略有差別,自己註意壹下吧。這裏我用的是python3.x。
//Py_InitModule("wmf",ExtestMethods);
PyObject?*m;
m?=?PyModule_Create(&wmf_module);
if?(m?==?NULL)?{
return?NULL;
}
return?m;
}