python - 将 .cpp 文件中的函数导入到 python 中

标签 python c++ cython boost-python

首先让我声明一下,我是在经过大量研究后提出这个问题的,并且没有找到任何直接且逐步的示例。

已阅读 Cython、SWIG、Boostpython 文档,但无法获得逐步过程,因此在此发布 -

我有一个 .cpp 和 .h 文件,其中定义了几个数学函数。我想在 python (.py) 代码文件中调用它们。

我如何集成?这是最好、最简洁的方法。请说明

最佳答案

由于我最终使用此处提供的一些帮助和研究解决了这个问题,所以让我发布答案。

我使用 Cython 通过 Python 导入了 CPP 函数。

Cython 用 CPP 文件包装 Python 代码并编译两者。结果是一个Python模块(模块的名称可以在setup.py文件中指定)并且可以像往常一样调用该模块。

我面临的问题是从 Python 调用 CPP 函数。所以这里是我解决这个问题的技巧

  1. 在 C++ 头文件和 CPP 文件中定义您的函数。
  2. 使用 cdef ,在导入模块的开头定义 Python 脚本中的函数,定义其他变量。此定义类似于 C++ 头文件定义
  3. 将参数和数组传递到 python 的函数调用时,请确保所有变量和数组都进行类型转换为 CPP。
  4. 对于数组来说,这有点棘手。例如。 Python 中的 double 组可以使用 array.array(array_to_cast) 进行类型转换。在以下示例中,我们将 python 数组 dev 转换为 C++ 数组 dev_arr请注意,dev 在 python 中是一个 double 类型的数组,因此 array.array() 输入的第一个参数是“d”
cdef array.array dev_arr = array.array('d',dev)   

dev_arr 数组传递给主 CPP 函数时,您必须指定此数组:data.as_doubles

fn_response = cpp_fn_call(stddev_arr.data.as_doubles,...)

休息后工作会顺利。

关于python - 将 .cpp 文件中的函数导入到 python 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28831637/

相关文章:

python - 在 Python 中使用 string.join() 时出现类型错误

python - Cython 中 C++ 函数的性能不佳

c++ - 将标准输出转发到 Qt 应用程序中的文件

c++ - 使用两个标准对结构数组进行排序 C++

c++ - 具有前向声明的转换运算符

python - Sage 的 "var"是如何工作的?

python - Cython 比 Numpy 慢(来自 Python Cookbook 的示例)

python - 谷歌云外壳 HttpAccessTokenRefreshError : This can occur if a VM was created with no service account or scopes

python - 通过 API 连接时,Interactive Broker 中出现错误“错误 id=-1,错误代码=2104,错误消息=市场数据场连接正常 :hfarm”

python - Flask Docker 镜像在 Azure 上出现超时错误