您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++項目中如何調用python函數”,在日常操作中,相信很多人在C++項目中如何調用python函數問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++項目中如何調用python函數”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
代碼如下,分別演示直接執行python語句、無返回無參數函數調用、返回單參數函數調用。返回多參數函數調用:
#include <Python.h> #include <iostream> using namespace std; //執行python命令 void ExecPythonCommand() { //直接執行 PyRun_SimpleString("from time import time,ctime\n" "print 'Today is',ctime(time())\n"); } //調用無參數函數 void InvokeNoParm() { PyObject* pMod = NULL; PyObject* pFunc = NULL; //導入模塊 pMod = PyImport_ImportModule("Life"); if(pMod) { //獲取函數地址 pFunc = PyObject_GetAttrString(pMod, "a"); if(pFunc) { //函數調用 PyEval_CallObject(pFunc, NULL); } else { cout << "cannot find function a" << endl; } } else { cout << "cannot find Life.py" << endl; } }
//調用一參數函數
void InvokeWith2Parm() { PyObject* pMod = NULL; PyObject* pFunc = NULL; PyObject* pParm = NULL; PyObject* pRetVal = NULL; int iRetVal = 0; //導入模塊 pMod = PyImport_ImportModule("FuncDef"); if(pMod) { pFunc = PyObject_GetAttrString(pMod, "square"); if(pFunc) { //創建參數 pParm = Py_BuildValue("(i)", 5); //函數調用 pRetVal = PyEval_CallObject(pFunc, pParm); //解析返回值 PyArg_Parse(pRetVal, "i", &iRetVal); cout << "square 5 is: " << iRetVal << endl; } else { cout << "cannot find function square" << endl; } } else { cout << "cannot find FuncDef.py" << endl; } }
//調用多參數函數
void InvokeWith3Parm() { PyObject* pMod = NULL; PyObject* pFunc = NULL; PyObject* pParm = NULL; PyObject* pRetVal = NULL; int iRetVal = 0; //導入模塊 pMod = PyImport_ImportModule("add"); if(pMod) { pFunc = PyObject_GetAttrString(pMod, "add"); if(pFunc) { //創建兩個參數 pParm = PyTuple_New(2); //為參數賦值 PyTuple_SetItem(pParm, 0, Py_BuildValue("i",2000)); PyTuple_SetItem(pParm, 1, Py_BuildValue("i",3000)); //函數調用 pRetVal = PyEval_CallObject(pFunc, pParm); //解析返回值 PyArg_Parse(pRetVal, "i", &iRetVal); cout << "2000 + 3000 = " << iRetVal << endl; } else { cout << "cannot find function square" << endl; } } else { cout << "cannot find add.py" << endl; } }
int main(int argc, char* argv[]) { Py_Initialize(); //python 解釋器的初始化 ExecPythonCommand(); InvokeNoParm(); InvokeWith2Parm(); InvokeWith3Parm(); Py_Finalize(); // 垃圾回收、清除導入庫 return 0; }
到此,關于“C++項目中如何調用python函數”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。