C/C++中嵌入Python
在C/C++中嵌入Python也比較簡單,首先需要在VC中加入Python的include檔目錄和lib檔目錄:
VC6.0下,開啟
tools->options->directories->show directories
for,將Python安裝目錄下的inlude目錄加入inlude files項目中,將libs目錄加入到library
files項中。
VC2005下,開啟tools->options->專案和解決方案->VC++目錄,然後做相同工作。
程式碼如下:
//在debug下执行出错,“无法找到python31_d.lib文件”,后查到原因是:在debug下生成必须要有python31_d.lib文件,否则只能在release下生成 #include <python.h> int main() { Py_Initialize(); PyRun_SimpleString("Print 'hi, python!'"); Py_Finalize(); return 0; }
Py_Initialize函數原型是:void
Py_Initialize(),在嵌入Python腳本時必須使用該函數,它初始化Python解釋器,在使用其他的Python/C
API之前必須先呼叫該函數。可以使用Py_IsInitialized函數判斷是否初始化成功,成功返回True。
PyRun_SimpleString函數原型是int
PyRun_SimpleString(const char
*command),用來執行一段Python程式碼。注意:是否需要維持語句間的縮排呢?
Py_Finalize函數原型是void
Py_Finalize(),用於關閉Python解釋器,釋放解釋器所佔用的資源。
PyRun_SimpleFile函數可以用來執行".py"腳本文件,函數原型如下:
int
PyRun_SimpleFile(FILE *fp, const char *filename);
其
中fp是開啟的檔案指針,filename是要執行的python腳本檔名。但由於該函數官方發布的是由visual studio
2003.NET編譯的,如果使用其他版本的編譯器,FILE定義可能會因為版本原因而崩潰。同時,簡單起見可以使用以下方式來取代此函數:
PyRun_SimpleString("execfile(‘file.py’)");
//使用execfile來執行python檔案
Py_BuildValue()用於對數字和字串進行轉換處理,變成Python中對應的資料類型(在C語言中,所有Python類型都被宣告為PyObject型別),函數原型如下:
PyObject
*Py_BuildValue(const char *format,
…..);
PyString_String()用於將PyObject*類型的變數轉換成C語言可以處理的char*型,具體原型如下:
char*
PyString_String(PyObject *p);
列表操作函數:
PyObject
* PyList_New(Py_ssize_t len);
int PyList_SetItem(PyObject *list, Py_ssize_t
index, PyObject *item);
PyObject * PyList_GetItem(PyObject *list, Py_ssize_t
index);
int PyList_Append(PyObject *list, PyObject *item);
int
PyList_Sort(PyObject *list);
int PyList_Reverse(PyObject
*list);
Py_ssize_t PyList_Size(PyObject *list);
元組操作函數:
int
PyTuple_New(Py_ssize_t len);
int PyTuple_SetItem(PyObject *p, Py_ssize_t pos,
PyObject *o);
PyObject * PyTuple_GetItem(PyObject *p, Py_ssize_t pos);
int
_PyTuple_Resize(PyObject **p, Py_ssize_t newsize);
//注意是**指標
字典操作函數:
PyObject * PyDict_New();
int PyDict_SetItem(PyObject
*p, PyObject *key, PyObject *val);
int PyDict_SetItemString(PyObject *p,
const char *key, PyObject *val);
PyObject* PyDict_GetItem(PyObject *p,
PyObject *key);
PyObject* PyDict_GetItemString(PyObject *p, const char
*key);
//與PyDict_SetItemString對應
int PyDict_DelItem(PyObject *p, PyObject
*key);
int PyDict_DelItemString(PyObject *p, char
*key);
//與PyDict_SetItemString對應
int PyDict_Next(PyObject *p, Py_ssize_t
*ppos, PyObject **pkey, PyObject **pvalue);
PyObject* PyDict_Items(PyObject
*p);
PyObject* PyDict_keys(PyObject *p);
PyObject* PyDict_Values(PyObject
*p);
在C/C++中使用Python物件應正確處理引用計數問題,否則容易導致記憶體洩漏。當使用Python/C
API中的函數建立清單、元組、字典等後,在對其完成操作後應該使用Py_CLEAR()和Py_DECREF()等巨集來銷毀這些物件。原型如下:
void
Py_CLEAR(PyObject *o);
void Py_DECREF(PyObject
*o);
其中,對於Py_CLEAR函數,參數可以為NULL指針,表示不進行任何操作,但是Py_DECREF函數不能為NULL指針,否則導致錯誤。
使用PyImport_Import()函數可以在C中導入Python模組,回傳一個模組物件。函數原型為:
PyObject*
PyImport_Import(PyObject
*name);
PyModule_GetDict()函數可以取得Python模組中的函數列表,傳回一個字典,字典中的關鍵字為函數名,值為函數的呼叫位址。原型如下:
PyObject*
PyModule_GetDict(PyObject
*module);
使用PyObject_CallObject()函數和PyObject_CallFunction()函數可以在C中呼叫Python中的函數,原型如下:
PyObject*
PyObject_CallObject(PyObject *callable_object, PyObject
*args);
//args是元組形式
PyObject* PyObject_CallFunction(PyObject *callable,
char *format,
……);
//format是類似”iss」這樣的參數類型,後面是指定參數
可以使用PyCallable_Check(func)來判斷是否可以呼叫函數,可以則傳回True。
以上就是C/C++中嵌入Python的內容,更多相關文章請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。
