python 与 C++ 交互

 

创建python虚拟环境并激活:

python -m  venv  my_pybind11

source my_pybind11/bin/activate

pip install pybind11

 创建实现 费波纳列

finbonacci.py

def fibonacci_recursive(n):
    """
    递归实现
    时间复杂度: O(2^n) - 效率很低
    空间复杂度: O(n) - 递归栈深度
    """
    if n <= 1:
        return n
    return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)

#     g++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` MyFibonacci.cpp -o MyFibonacci`python3-config --extension-suffix`

i = 20
print(f"n= {i}时,费波纳列数列结果为:",fibonacci_recursive(i))

MyFibonacci.cpp

#include <pybind11/pybind11.h>
#include <iostream>

namespace py = pybind11;

class MyClass {
public:
    // 构造函数
    MyClass(int value) : value_(value) {}

    // 设置值
    void set_value(int value) {
        value_ = value;
    }

    // 获取值
    int get_value() const {
        return value_;
    }

    // 显示值
    void display() const {
        std::cout << "Value: " << value_ << std::endl;
    }
    //递归

    int fibonacci_recursive(int value_){
        if(value_<=1){
            return value_;
        }
        return fibonacci_recursive(value_-1)+fibonacci_recursive(value_-2);
    }

private:
    int value_;
};

// 使用pybind11进行绑定
PYBIND11_MODULE(MyFibonacci, m) {
    py::class_<MyClass>(m, "MyClass")
        .def(py::init<int>())  // 绑定构造函数
        .def("set_value", &MyClass::set_value)  // 绑定 set_value 方法
        .def("get_value", &MyClass::get_value)  // 绑定 get_value 方法
        .def("display", &MyClass::display)  // 绑定 display 方法
        .def("fibonacci_recursive",&MyClass::fibonacci_recursive);
}

编译C++ 文件

g++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` MyFibonacci.cpp -o MyFibonacci`python3-config --extension-suffix`

image

 

测试文件:test_pybind11_fibonacci.py

import MyFibonacci

i = 20
# 创建一个 MyClass 实例
obj = MyFibonacci.MyClass(i)

# num = obj.fibonacci_recursive(i)

print(f"n= {i}时,费波纳列数列结果为:",obj.fibonacci_recursive(i))

 

测试python实现 与 编译c++实现效果:

image

 

posted @ 2025-12-01 17:36  温家三哥  阅读(2)  评论(0)    收藏  举报