C++引用python代码

要在C++中引用Python代码,可以使用CPython库,这是Python的官方扩展库,允许C++代码与Python代码进行交互。以下是一个简单的示例说明如何在C++中引用Python代码:

步骤 1: 安装CPython

首先,确保你已经安装了CPython。你可以从 Python官方网站 下载并安装最新版本的Python。

步骤 2: 编写Python代码

创建一个简单的Python脚本,例如 example.py,其中包含你想要在C++中调用的功能。

# example.pydef add_numbers(a, b):    return a + b

步骤 3: 使用C++调用Python代码

创建一个C++程序,使用CPython库调用Python代码。例如,创建一个名为 main.cpp 的文件。

// main.cpp
​
#include <Python.h>
​
int main() {
    // 初始化Python解释器
    Py_Initialize();
​
    // 导入Python模块
    PyObject* pModule = PyImport_ImportModule("example");
​
    // 检查模块导入是否成功
    if (pModule != NULL) {
        // 获取模块中的函数
        PyObject* pFunction = PyObject_GetAttrString(pModule, "add_numbers");
​
        // 检查函数获取是否成功
        if (pFunction != NULL) {
            // 准备函数参数
            PyObject* pArgs = PyTuple_Pack(2, PyLong_FromLong(2), PyLong_FromLong(3));
​
            // 调用Python函数
            PyObject* pResult = PyObject_CallObject(pFunction, pArgs);
​
            // 打印结果
            if (pResult != NULL) {
                printf("Result of Python function: %ld\n", PyLong_AsLong(pResult));
                Py_DECREF(pResult);
            } else {
                PyErr_Print();
            }
​
            // 释放函数参数
            Py_DECREF(pArgs);
            // 释放函数对象
            Py_DECREF(pFunction);
        } else {
            PyErr_Print();
        }
​
        // 释放模块对象
        Py_DECREF(pModule);
    } else {
        PyErr_Print();
    }
​
    // 关闭Python解释器
    Py_Finalize();
​
    return 0;
}

步骤 4: 编译和运行

使用C++编译器(如g++)编译 main.cpp 文件。

g++ main.cpp -o my_program -I/usr/include/python3.x -lpython3.x

其中,3.x 是你安装的Python版本号。

运行生成的可执行文件:

./my_program

这样,你就成功在C++中引用了Python代码,并调用了其中的函数。请确保你的系统中已经正确安装了Python和相应的开发包。

以下是一个修改后的例子,演示如何调用包含多个函数的Python模块:

首先,修改 example.py 文件,添加一个额外的函数:

# example.pydef add_numbers(a, b):    return a + bdef multiply_numbers(a, b):    return a * b

然后,修改 main.cpp 文件以调用新添加的函数:
 

// main.cpp
​
#include <Python.h>
​
int main() {
    // 初始化Python解释器
    Py_Initialize();
​
    // 导入Python模块
    PyObject* pModule = PyImport_ImportModule("example");
​
    // 检查模块导入是否成功
    if (pModule != NULL) {
        // 获取模块中的函数(add_numbers)
        PyObject* pAddFunction = PyObject_GetAttrString(pModule, "add_numbers");
​
        // 获取模块中的函数(multiply_numbers)
        PyObject* pMultiplyFunction = PyObject_GetAttrString(pModule, "multiply_numbers");
​
        // 检查函数获取是否成功
        if (pAddFunction != NULL && pMultiplyFunction != NULL) {
            // 准备函数参数
            PyObject* pArgsAdd = PyTuple_Pack(2, PyLong_FromLong(2), PyLong_FromLong(3));
            PyObject* pArgsMultiply = PyTuple_Pack(2, PyLong_FromLong(2), PyLong_FromLong(3));
​
            // 调用Python函数(add_numbers)
            PyObject* pResultAdd = PyObject_CallObject(pAddFunction, pArgsAdd);
​
            // 打印结果
            if (pResultAdd != NULL) {
                printf("Result of add_numbers: %ld\n", PyLong_AsLong(pResultAdd));
                Py_DECREF(pResultAdd);
            } else {
                PyErr_Print();
            }
​
            // 调用Python函数(multiply_numbers)
            PyObject* pResultMultiply = PyObject_CallObject(pMultiplyFunction, pArgsMultiply);
​
            // 打印结果
            if (pResultMultiply != NULL) {
                printf("Result of multiply_numbers: %ld\n", PyLong_AsLong(pResultMultiply));
                Py_DECREF(pResultMultiply);
            } else {
                PyErr_Print();
            }
​
            // 释放函数参数
            Py_DECREF(pArgsAdd);
            Py_DECREF(pArgsMultiply);
​
            // 释放函数对象
            Py_DECREF(pAddFunction);
            Py_DECREF(pMultiplyFunction);
        } else {
            PyErr_Print();
        }
​
        // 释放模块对象
        Py_DECREF(pModule);
    } else {
        PyErr_Print();
    }
​
    // 关闭Python解释器
    Py_Finalize();
​
    return 0;
}
​

相关推荐

  1. C++引用python代码

    2024-04-03 22:20:02       47 阅读
  2. C++ 引用

    2024-04-03 22:20:02       55 阅读
  3. <span style='color:red;'>C</span>++<span style='color:red;'>引用</span>

    C++引用

    2024-04-03 22:20:02      51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 22:20:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 22:20:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 22:20:02       87 阅读
  4. Python语言-面向对象

    2024-04-03 22:20:02       96 阅读

热门阅读

  1. 信奥赛一本通 【例4.2】天安门广场的面积

    2024-04-03 22:20:02       40 阅读
  2. pygame--坦克大战(二)

    2024-04-03 22:20:02       39 阅读
  3. 供应商管理软件:供应商绩效评估实用清单

    2024-04-03 22:20:02       40 阅读
  4. ChatGPT学术写作攻略:让论文更具深度

    2024-04-03 22:20:02       38 阅读
  5. 宝塔面板无法访问 404 not found

    2024-04-03 22:20:02       33 阅读
  6. Memcached 教程之 Memcached add 命令(六)

    2024-04-03 22:20:02       35 阅读