请考虑我从 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);
}
最佳答案
这是一个最小的例子:
#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);
}
关于python - 如何让我的 Python 扩展接受额外的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21480619/