请考虑以下我从Python文档页面获取的示例代码。现在需要一个论点。我想让它接受像“mode = 2”这样的命名参数。所以我可以调用myext.do_something('/ home / crypto / something.jpg',mode = 2)。使用mode传递的参数应该是一个整数,如果它得到其他东西,我希望它在Python中引发错误。我该怎么做呢?我想我应该编辑module_functions [],但我不知道该放什么。
#include <Python.h>
static PyObject *
do_something(PyObject *self, PyObject *args)
{
char *filename;
if (!PyArg_ParseTuple(args, "s", &filename))
return NULL;
char *result = do_somethingelse(filename);
return Py_BuildValue("s", result);
}
static PyMethodDef
module_functions[] = {
{ "do_something", do_something, METH_VARARGS, "do something" },
{ NULL }
};
PyMODINIT_FUNC
initmyext(void)
{
Py_InitModule("myext", module_functions);
}
答案 0 :(得分:1)
这是一个最小的例子:
#include <Python.h>
static PyObject *
do_something(PyObject *self, PyObject *args, PyObject *kwargs)
{
char *filename;
int mode = 2;
static char *keywords[] = {"filename", "mode", NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i", keywords, &filename, &mode))
return NULL;
char *result = do_somethingelse(filename);
return Py_BuildValue("s", result);
}
static PyMethodDef
module_functions[] = {
{ "do_something", (PyCFunction)do_something, METH_VARARGS | METH_KEYWORDS, "do something" },
{ NULL }
};
PyMODINIT_FUNC
initmyext(void)
{
Py_InitModule("myext", module_functions);
}