C++如何调用Python代码

C++和Python进行交互一般有两种情况:

C++代码中内嵌入Python:当C++项目中有部分功能需要经常发生变更时,以此来达到功能需求的灵活性,那么将这部分功能通过Python实现,再通过C++调用即可。这种一般会在原型开发、插件系统、热更新等场景使用。

C++扩展Python:当Python项目中遇到性能瓶颈时,常规做法是将性能瓶颈部分进行剥离,使用C++封装成Python可调用的模块,比如so库。

这里推荐使用pybind11库,一个C++轻量级库,专用于C++和Python之间进行互操作,该库的设计理念是让开发者能够在C++和Python之间轻松的进行交互,无需对底层Python的 C API进行深入了解。

接下来着重讲解一下如何在C++中调用Python:

方法一:使用Python提供给C++的API

当前使用最多的方式是将Python代码编译成文本类型的动态链接库,C++代码中只需定义你调用Python代码的函数;

这种方式与在C++中直接启用一个Python解释器并无差异,通过Python解释器执行调用的Python代码,执行完成后释放资源,即可完成调用目的。

在pybind11中提供了初始化Python解释器的功能,需要对Python解释器的管理机制进行理解;当对程序进行启动时,首先对Python解释器进行初始化,程序执行完成后,需要清理Python解释器,确保所有Python对象都能够正确释放,避免造成资源未得到正确释放和内存泄漏等。

而C++与Python能够进行交互的核心是:数据转换。pybind11中提供了丰富的类型,能够自动转换大部分的数据类型,比如传递容器、基本类型、以及自定义类型等。

Python中提供的C++调用主要API

参数传递方式

方法二:调用Python脚本

不推荐使用这种方式,这种方法的缺陷是获取函数返回值不太便利,具体的做法可自行上网搜索教程,这里不在展开讲解。

如果直接调用Python脚本,那么C++调用Python代码的威力是发挥不出来的,这样的调用连单向都称不上,真正有用的是两者互相调用,Python的脚本可以调用C++的函数或类、接受来自C++的传参参数、又能够将返回值返回到C++,而C++又可以将函数暴露给Python,这样就实现了C++与Python的互相调用。

相关推荐
WW、forever19 分钟前
【服务器】上传服务器中数据至 FigShare(Python)
运维·服务器·python
消失的旧时光-194321 分钟前
C++ 多线程与并发系统取向(七)—— 并发排障与工程纪律(从“会写”到“能控场”)
开发语言·c++·并发
宝贝儿好22 分钟前
【强化学习】第十章:随机高斯策略
人工智能·python·深度学习·神经网络·机器人·自动驾驶
haosend23 分钟前
【练习版】使用paramiko批量的查询,管理,配置路由器交换机
python·路由器·交换机·网络自动化
Y0011123625 分钟前
Day24—IO流-2
java·开发语言
CS生28 分钟前
Rust环境准备
开发语言·后端·rust
Dxy123931021638 分钟前
Python生成随机手机号码
开发语言·python
小帅学编程1 小时前
Python学习
开发语言·python·学习
两万五千个小时1 小时前
构建mini Claude Code:08 - Fire and Forget:用后台线程解锁 Multi-Agent 并行执行
人工智能·python·架构
JaydenAI1 小时前
[拆解LangChain执行引擎]支持自然语言查询的长期存储
python·langchain