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的互相调用。

相关推荐
专注仿真2 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes2 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停3 小时前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云3 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook3 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
别动我齐刘海4 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
棉猴4 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
诺伦4 小时前
GEO优化数据实证:78%引用流向官网的机制拆解与小品牌三步管线实战教程 | RiseClaw玄策
python·seo·geo·内容营销·ai搜索
oooost4 小时前
pytorch学习笔记1
python·学习方法
鬼手点金5 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github