gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:44:10 24 4
gpt4 key购买 nike

我需要包装一个接口(interface)的C函数

double foo(double)

到 python,以便在 python 控制台中

>>foo_py(2.9)

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

我一直在寻找包装这样一个 C 函数的最简单方法。在 stackoverflow 上肯定有很多相关的帖子,但它们都是几年前的了,此时此刻我正在寻找获取针对我的特定需求的更新答案。谢谢。

[编辑] 有关信息,我尝试使用 PyObj 等进行 C 扩展。这方面的文档似乎不足。我还尝试使用将 C++ 函数包装到 Python 的 Boost.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 测试.py

关于python - 寻找将 double->double C 函数包装到 Python 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29887410/

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