日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/20 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++调用python的代码、函数、类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、配置python環境問題

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

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

2.在VS中配置環境和庫

右擊項目->屬性->VC++目錄

1)包含目錄:

Python安裝路徑/include

2)庫目錄:

Python安裝路徑/libs

右擊項目->屬性->連接器->輸入->附加依賴庫

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

注意
1、debug配置的時候可能沒有python37_d.lib,那就把python37.lib復制一個,然后重命名為python36_d.lib就可以啦
2、如果一直報錯,但是包含頭文件等都沒有問題,那么你需要看一下你的python是32位還是64位的。然后根據python的環境去配置vs的環境。


即圖中,注意根據python環境選擇64還是32位。

二、c++中運行python代碼

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

三、c++調用python函數并輸出返回值

3.1、定義python函數

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

3.2、測試

#include <Python.h> #include<iostream>using namespace std;int main() {Py_Initialize();//使用python之前,要調用Py_Initialize();這個函數進行初始化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");//這里是要調用的文件名hello.pyif (pModule == NULL){cout << "沒找到" << endl;}pFunc = PyObject_GetAttrString(pModule, "add_num");//這里是要調用的函數名PyObject* args = Py_BuildValue("(ii)", 28, 103);//給python函數參數賦值PyObject* pRet = PyObject_CallObject(pFunc, args);//調用函數int res = 0;PyArg_Parse(pRet, "i", &res);//轉換返回類型cout << "res:" << res << endl;//輸出結果Py_Finalize();//調用Py_Finalize,這個根Py_Initialize相對應的。return 0; }

注意:請將python文件放在c++項目的根目錄或者改變測試代碼中的python文件的路徑。

四、調用python的類

int test03() {Py_Initialize();//使用python之前,要調用Py_Initialize();這個函數進行初始化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");//這里是要調用的文件名hello.pyif (pModule == NULL){cout << "沒找到" << 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;}//構造Person的實例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);//轉換返回類型cout << "res:" << res << endl;//輸出結果//釋放/*Py_DECREF(pClassCalc);Py_DECREF(pInstanceCalc);Py_DECREF(pModule);*/Py_Finalize(); // 與初始化對應system("pause");return 0; }

點個贊,看一看,好習慣!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收錄,這是我花了 3 個月總結的一線大廠 Java 面試總結,本人已拿大廠 offer。
另外,原創文章首發在我的個人博客:blog.ouyangsihai.cn,歡迎訪問。

最后,再分享我歷時三個月總結的 Java 面試 + Java 后端技術學習指南,這是本人這幾年及春招的總結,已經拿到了大廠 offer,整理成了一本電子書,拿去不謝,目錄如下:

現在免費分享大家,在下面我的公眾號 程序員的技術圈子 回復 面試 即可獲取。

有收獲?希望老鐵們來個三連擊,給更多的人看到這篇文章

1、老鐵們,關注我的原創微信公眾號「程序員的技術圈子」,專注于 Java、數據結構和算法、微服務、中間件等技術分享,保證你看完有所收獲。

2、給俺點個贊唄,可以讓更多的人看到這篇文章,順便激勵下我繼續寫作,嘻嘻。

3、另外,原創文章首發在我的個人博客:blog.ouyangsihai.cn,歡迎訪問。

點贊是對我最大的鼓勵
↓↓↓↓↓↓

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。