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

标签 python c wrapper

我需要包装接口(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/

相关文章:

python - 按二维索引对三维 numpy 数组进行排序

c - Arduino Serial.print() 优化

c - 输入字符后程序停止工作,我不知道如何

c++ - 快速序列有序 Walsh-Hadamard 变换

javascript - 使用包装器按比例调整 div 的大小

java - 可以将java翻译成jruby吗?

Java "double cannot be dereferenced"错误 - 在 double 据类型上调用方法

python - 每个 Flask session 存储大数据或服务连接

python - 使用 crontab 运行时 matplotlib savefig 不起作用

python - 如何让 PyC​​harm 识别静态文件?