gpt4 book ai didi

python - 如何让我的 Python 扩展接受额外的参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:25 26 4
gpt4 key购买 nike

请考虑我从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com