我需要包装接口(interface)的 C 函数
double foo(double)
到Python,以便在Python控制台中
>>foo_py(2.9)
应该给我 foo(2.9) 的 double 值。最终,我在 scipy 中使用导出的 foo_py。
我一直在寻找最简单的方法来包装这样的C函数。stackoverflow上肯定有很多相关的帖子,但它们都是几年前的日期,现在我正在寻找针对我的具体需求的更新答案。谢谢。
[编辑] 有关信息,我尝试使用 PyObj 等使用 C 扩展。这方面的文档似乎缺乏。我还尝试使用 Boost.Python 将 C++ 函数包装到 Python。这里我需要包装 C 函数(以避免命名分解问题等)。
最佳答案
以下是如何执行此操作的简单示例:
测试.c
#include <Python.h>
static PyObject* foo(PyObject* self, PyObject* args) {
double d;
PyArg_ParseTuple(args, "d", &d);
return Py_BuildValue("d", d);
}
// Bind python function to C function
static PyMethodDef simplemodule_methods[] = {
{"foo_py", foo, METH_VARARGS},
{NULL, NULL, 0}
};
// Initialize module
void inittest() {
(void) Py_InitModule("test", simplemodule_methods);
}
测试.py
from test import *
print foo_py(2.9) # will output 2.9
编译
gcc -shared -fPIC -I/usr/include/python2.7 -o test.so test.c
运行
python test.py
关于python - 寻找将 double->double C 函数包装到 Python 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29887410/