寻找将 double->double C 函数包装到 Python 的最简单方法

Finding the simplest way to wrap a double->double C function to Python

我需要包装接口的 C 函数

double foo(double)

到python,这样在python控制台

>>foo_py(2.9)

应该给我 foo(2.9) 的双精度值。最终,我在 scipy 中使用导出的 foo_py。

我一直在寻找 最简单 的方式来包装这样一个 C function.There Whosebug 上肯定有很多相关的帖子,但它们是几年前的日期了此时此刻,我正在为我的特定需求寻找更新的答案。谢谢。

[编辑] 有关信息,我尝试使用 PyObj 等进行 C 扩展。这方面的文档似乎不足。我还尝试使用 Boost.Python 将 C++ 函数包装到 Python。这里我需要包装 C 函数(为了避免命名 demangling 问题等)。

这是一个简单的操作示例:

test.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);
}

test.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

这是我的视频,祝你好运https://asciinema.org/a/18926