国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

C++調用Python淺析

2019-11-06 06:32:28
字體:
來源:轉載
供稿:網友

在一個C++應用程序中,我們可以用一組插件來實現一些具有統一接口的功能,一般插件都是使用動態鏈接庫實現,如果插件的變化比較頻繁,我們可以使用Python來代替動態鏈接庫形式的插件(堪稱文本形式的動態鏈接庫),這樣可以方便地根據需求的變化改寫腳本代碼,而不是必須重新編譯鏈接二進制的動態鏈接庫。靈活性大大的提高了。

通過C++調用Python腳本主要要用到如下的一些Python提供的API,因為實際上C++要調用的是Python的解釋器,而Python解釋器本質就是實現在動態鏈接庫里面的,因此在調用前和調用后要進行一些初始化和資源釋放的工作,另外,要調用Python腳本里面的函數等等東西,需要Python提供的一些特殊API來包裝C++調用。(可以參考[2])。

void Py_Initialize(void)

初始化Python解釋器,如果初始化失敗,繼續下面的調用會出現各種錯誤,可惜的是此函數沒有返回值來判斷是否初始化成功,如果失敗會導致致命錯誤。 

int Py_IsInitialized(void)

檢查是否已經進行了初始化,如果返回0,表示沒有進行過初始化。 

void Py_Finalize()

反初始化Python解釋器,包括子解釋器,調用此函數同時會釋放Python解釋器所占用的資源。 

int PyRun_SimpleString(const char *command)

實際上是一個宏,執行一段Python代碼。 

PyObject* PyImport_ImportModule(char *name)

導入一個Python模塊,參數name可以是*.py文件的文件名。類似Python內建函數import。 

PyObject* PyModule_GetDict( PyObject *module)

相當于Python模塊對象的__dict__屬性,得到模塊名稱空間下的字典對象。 

PyObject* PyRun_String(const char* str, int start,PyObject* globals, PyObject* locals)

執行一段Python代碼。 

int PyArg_Parse(PyObject* args, char* format, ...)

把Python數據類型解析為C的類型,這樣C程序中才可以使用Python里面的數據。 

PyObject* PyObject_GetAttrString(PyObject *o, char*attr_name)

返回模塊對象o中的attr_name 屬性或函數,相當于Python中表達式語句,o.attr_name。 

PyObject* Py_BuildValue(char* format, ...)

和PyArg_Parse剛好相反,構建一個參數列表,把C類型轉換為Python對象,使得Python里面可以使用C類型數據。 

PyObject* PyEval_CallObject(PyObject* pfunc, PyObject*pargs)

此函數有兩個參數,而且都是Python對象指針,其中pfunc是要調用的Python 函數,一般說來可以使用PyObject_GetAttrString()獲得,pargs是函數的參數列表,通常是使用Py_BuildValue()來構建。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东山县| 手游| 河南省| 永寿县| 青龙| 碌曲县| 呼图壁县| 西充县| 鄄城县| 天峨县| 榆社县| 定襄县| 阳城县| 武邑县| 三门县| 双城市| 浦江县| 安庆市| 图们市| 贵溪市| 商丘市| 新安县| 沁阳市| 团风县| 突泉县| 建始县| 华池县| 洪泽县| 鄂州市| 和平县| 三亚市| 泊头市| 丹凤县| 临夏市| 鄂尔多斯市| 萍乡市| 马公市| 修水县| 光泽县| 尖扎县| 历史|