日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

c++调用python的代码、函数、类

發(fā)布時(shí)間:2025/3/20 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++调用python的代码、函数、类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、配置python環(huán)境問(wèn)題

1.首先安裝Python(版本無(wú)所謂),安裝的時(shí)候選的添加python路徑到環(huán)境變量中

安裝之后的文件夾如下所示:

2.在VS中配置環(huán)境和庫(kù)

右擊項(xiàng)目->屬性->VC++目錄

1)包含目錄:

Python安裝路徑/include

2)庫(kù)目錄:

Python安裝路徑/libs

右擊項(xiàng)目->屬性->連接器->輸入->附加依賴庫(kù)

debug下:
python安裝目錄/libs/python37.lib
release下:
python安裝目錄/libs/python37_d.lib

注意
1、debug配置的時(shí)候可能沒(méi)有python37_d.lib,那就把python37.lib復(fù)制一個(gè),然后重命名為python36_d.lib就可以啦
2、如果一直報(bào)錯(cuò),但是包含頭文件等都沒(méi)有問(wèn)題,那么你需要看一下你的python是32位還是64位的。然后根據(jù)python的環(huán)境去配置vs的環(huán)境。


即圖中,注意根據(jù)python環(huán)境選擇64還是32位。

二、c++中運(yùn)行python代碼

#include<python.h> #include<iostream>int main() {Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個(gè)函數(shù)進(jìn)行初始化PyRun_SimpleString("print('hello world!')");PyRun_SimpleString("def fun:print('test');")Py_Finalize();return 0; }

三、c++調(diào)用python函數(shù)并輸出返回值

3.1、定義python函數(shù)

def add(a,b):return a+b

3.2、測(cè)試

#include <Python.h> #include<iostream>using namespace std;int main() {Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個(gè)函數(shù)進(jìn)行初始化if (!Py_IsInitialized()){printf("初始化失敗!");return 0;}PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");//這一步很重要,修改Python路徑PyObject * pModule = NULL;//聲明變量PyObject * pFunc = NULL;// 聲明變量pModule = PyImport_ImportModule("pythonTest");//這里是要調(diào)用的文件名hello.pyif (pModule == NULL){cout << "沒(méi)找到" << endl;}pFunc = PyObject_GetAttrString(pModule, "add_num");//這里是要調(diào)用的函數(shù)名PyObject* args = Py_BuildValue("(ii)", 28, 103);//給python函數(shù)參數(shù)賦值PyObject* pRet = PyObject_CallObject(pFunc, args);//調(diào)用函數(shù)int res = 0;PyArg_Parse(pRet, "i", &res);//轉(zhuǎn)換返回類型cout << "res:" << res << endl;//輸出結(jié)果Py_Finalize();//調(diào)用Py_Finalize,這個(gè)根Py_Initialize相對(duì)應(yīng)的。return 0; }

注意:請(qǐng)將python文件放在c++項(xiàng)目的根目錄或者改變測(cè)試代碼中的python文件的路徑。

四、調(diào)用python的類

int test03() {Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個(gè)函數(shù)進(jìn)行初始化if (!Py_IsInitialized()){printf("初始化失敗!");return 0;}PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");//這一步很重要,修改Python路徑PyObject * pModule = NULL;//聲明變量PyObject * pFunc = NULL;// 聲明變量PyObject * pClass = NULL;//聲明變量PyObject * pInstance = NULL;pModule = PyImport_ImportModule("pythonTest");//這里是要調(diào)用的文件名hello.pyif (pModule == NULL){cout << "沒(méi)找到" << endl;}// 模塊的字典列表PyObject* pDict = PyModule_GetDict(pModule);if (!pDict) {printf("Cant find dictionary./n");return -1;}//獲取calc類PyObject* pClassCalc = PyDict_GetItemString(pDict, "calc");if (!pClassCalc) {printf("Cant find calc class./n");return -1;}//構(gòu)造Person的實(shí)例PyObject* pInstanceCalc = PyInstanceMethod_New(pClassCalc);if (!pInstanceCalc) {printf("Cant find calc instance./n");return -1;}PyObject* pRet = PyObject_CallMethod(pClassCalc,"add","10","10", pInstanceCalc);if (!pRet){printf("不能找到 pRet");return -1;}int res = 0;PyArg_Parse(pRet, "i", &res);//轉(zhuǎn)換返回類型cout << "res:" << res << endl;//輸出結(jié)果//釋放/*Py_DECREF(pClassCalc);Py_DECREF(pInstanceCalc);Py_DECREF(pModule);*/Py_Finalize(); // 與初始化對(duì)應(yīng)system("pause");return 0; }

點(diǎn)個(gè)贊,看一看,好習(xí)慣!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收錄,這是我花了 3 個(gè)月總結(jié)的一線大廠 Java 面試總結(jié),本人已拿大廠 offer。
另外,原創(chuàng)文章首發(fā)在我的個(gè)人博客:blog.ouyangsihai.cn,歡迎訪問(wèn)。

最后,再分享我歷時(shí)三個(gè)月總結(jié)的 Java 面試 + Java 后端技術(shù)學(xué)習(xí)指南,這是本人這幾年及春招的總結(jié),已經(jīng)拿到了大廠 offer,整理成了一本電子書(shū),拿去不謝,目錄如下:

現(xiàn)在免費(fèi)分享大家,在下面我的公眾號(hào) 程序員的技術(shù)圈子 回復(fù) 面試 即可獲取。

有收獲?希望老鐵們來(lái)個(gè)三連擊,給更多的人看到這篇文章

1、老鐵們,關(guān)注我的原創(chuàng)微信公眾號(hào)「程序員的技術(shù)圈子」,專注于 Java、數(shù)據(jù)結(jié)構(gòu)和算法、微服務(wù)、中間件等技術(shù)分享,保證你看完有所收獲。

2、給俺點(diǎn)個(gè)贊唄,可以讓更多的人看到這篇文章,順便激勵(lì)下我繼續(xù)寫(xiě)作,嘻嘻。

3、另外,原創(chuàng)文章首發(fā)在我的個(gè)人博客:blog.ouyangsihai.cn,歡迎訪問(wèn)。

點(diǎn)贊是對(duì)我最大的鼓勵(lì)
↓↓↓↓↓↓

總結(jié)

以上是生活随笔為你收集整理的c++调用python的代码、函数、类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。