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`

测试文件: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++实现效果:


浙公网安备 33010602011771号