从C函数生成PyObject*?

2024-10-01 17:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我把python嵌入到我正在制作的C++库中。我希望用户能够以函数指针PyObject* (fpFunc*)(PyObject*,PyObject*);的形式传递C函数,以便在嵌入式Python中使用这些函数。在

所以我有一个函数指针,我知道可以使用PyMethodDef结构将此函数作为模块的方法,并将其传递给Py_InitModule("module", ModMethods);,从而获得一个{},我可以很容易地从中获取函数。在

但是,我真正感激的是能够动态地创建这个函数,而不必每次都重新创建另一个模块。在

我已经研究了Python文档和一些Python头文件,以考虑一种没有真正成功的方法来实现这一点。。。但我想知道有没有更传统的方法来做这件事。在

根据我的理解,每个函数都属于一个模块,甚至__builtin__,所以我想我至少需要一个模块。在

有什么办法吗?在


Tags: 模块方法函数用户py动态结构形式
1条回答
网友
1楼 · 发布于 2024-10-01 17:26:22

找到了。虽然它不在文档中,在源代码中也不明确。在

PyObject* (*fpFunc)(PyObject*,PyObject*) = someFunction;
PyMethodDef methd = {"methd",fpFunc,METH_VARARGS,"A new function"};
PyObject* name = PyString_FromString(methd.ml_name);
PyObject* pyfoo = PyCFunction_NewEx(&methd,NULL,name);
Py_DECREF(name);

它起作用了。我可以像通常调用Python函数对象一样调用函数。在

如果你好奇的话,我在文档中找到的都是关于Py_InitModule4和加载模块的,所以我去查看了Python的源代码,找到了关于PyCFunction的内容,然后我在文档中四处查找,但找不到关于{}的任何内容,所以我必须检查源代码以确保它与我所想的一样。在

相关问题 更多 >

    热门问题