本文主要研究的是使用C++擴展Python的功能的相關問題,具體如下。
環(huán)境
VS2005Python2.5.4Windows7(32位)
簡介
長話短說,這里說的擴展Python功能與直接用其它語言寫一個動態(tài)鏈接庫,然后讓Python來調用有點不一樣(雖然本質是一樣的)。而是指使用Python本身提供的API,使用C++來對Python進行功能性擴展,可以這樣理解,使用更高效的語言實現(xiàn)一些算法計算等等需要更高執(zhí)行效率的核心(或者需要與系統(tǒng)進行密切交互的)模塊,然后讓Python像調用內建標準庫的方式來調用這些模塊,聽起來是不是很誘人?!在軟件技術高速發(fā)展的今天,借助幾種計算機語言來實現(xiàn)一個系統(tǒng)的例子數(shù)不勝數(shù),目的不外乎就是性能和便利的平衡。譬如本文要討論的使用C++來擴展Python就是Python和C++的一種巧妙的有機結合,好處不言而喻,既可以獲得和C++相似的執(zhí)行性能,又可以利用Python的開發(fā)靈活性。由于Python本身是使用C實現(xiàn)的,二者結合起來還是比較容易的。
基本流程
本文不適合這樣的讀者——對Python完全不了解或者對C\C++完全不了解,道理你們懂的。另外就是Python里面有6種基本數(shù)據(jù)類型。你需要了解如何在C和Python之間對這些類型進行轉化(這不在本文討論范圍,可以參考[1])。
言歸正傳,感覺前面說得太多了,實際上很簡單,因此我決定少說多做。一個C++的Python擴展模塊至少應該有導出函數(shù),方法列表和初始化函數(shù)三個部分。我們用VS2005這個強大的工具開工!一般來說,你應該建一個Dll工程(至于使用exe來擴展Python可以不可以,暫時還沒研究過)。下面按部就班的說明(關鍵說明在注釋部分)。
一、初始化函數(shù)
//------------------------------------------------------------------------- // 函數(shù) : initPyExt // 功能 : 初始化函數(shù) // 返回值 :PyMODINIT_FUNC // 附注 : 注意,這個函數(shù)的名字不能改動。必須是init+模塊名字, // 我們的模塊名字是PyExt,所以函數(shù)名是initPyExt。Python在導入 // 我們的PyExt模塊時,會找到這個函數(shù),并調用。這個函數(shù)實現(xiàn)的 // 功能很簡單,通過調用Py_InitModule將模塊名字和映射表結合起 // 來,它的意思是說PyExt這個模塊使用PyExtMethods這個映射表。 //------------------------------------------------------------------------- PyMODINIT_FUNCinitPyExt() { Py_InitModule("PyExt",PyExtMethods); }
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁標題:使用C++擴展Python的功能詳解-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://www.sd-ha.com/article0/jjhio.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、ChatGPT、商城網(wǎng)站、標簽優(yōu)化、軟件開發(fā)、外貿建站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)