盧紹兵
摘??要:Python屬于ABC語言替代品,能夠?yàn)檎Z言編程提供高效、高級的數(shù)據(jù)結(jié)構(gòu),有效面對對象進(jìn)行編程操作。Python編程語言的設(shè)計(jì)風(fēng)格一般比較清晰統(tǒng)一,這使得Python編程語言能夠簡單易懂,維護(hù)起來也十分便利,所以被很多大眾所接受和喜歡,應(yīng)用推廣速度比較快。Python是目前一種常用的腳本語言,在混合語言編程的軟件開發(fā)中具有很好的應(yīng)用效果。該文對Python編程語言進(jìn)行論述,研究Python編程語言的語言風(fēng)格、語言優(yōu)點(diǎn)等,并探究其在混合語言編程中的應(yīng)用和實(shí)現(xiàn)。
關(guān)鍵詞:Python???混合語言編程???數(shù)據(jù)分析???軟件
中圖分類號:?TP313????文獻(xiàn)標(biāo)識(shí)碼:A???文章編號:1672-3791(2022)07(b)-0000-00
Research?on?Mixed?language?Programming?Based?on?Python?and?Its?Implementation
LU?Shaobing
(Yunnan?business?college,?Kunming,?Yunnan?Province,??651701?China)
Abstract:?Python?is?an?alternative?to?ABC?language,?which?can?provide?efficient?and?advanced?data?structure?for?language?programming?and?effectively?program?objects.?The?design?style?of?Python?programming?language?is?generally?clear?and?unified,?which?makes?python?programming?language?easy?to?understand?and?convenient?to?maintain.?Therefore,?it?is?accepted?and?liked?by?many?people,?and?its?application?and?promotion?speed?is?relatively?fast.?Python?is?a?commonly?used?scripting?language,?which?has?a?good?application?effect?in?the?software?development?of?mixed?language?programming.?This?paper?discusses?the?python?programming?language,?studies?the?language?style?and?language?advantages?of?Python?programming?language,?and?explores?its?application?and?implementation?in?mixed?language?programming.
Key?Words:?Python;?Mixed?language?programming;?Data?analysis;?Software
1.1語言風(fēng)格
Python屬于ABC語言替代品,能夠?yàn)檎Z言編程提供高效、高級的數(shù)據(jù)結(jié)構(gòu),有效面對對象進(jìn)行編程操作[1]。Python編程語言的設(shè)計(jì)風(fēng)格一般比較清晰統(tǒng)一,這使得Python編程語言能夠簡單易懂,維護(hù)起來也十分便利,所以被很多大眾所接受和喜歡,應(yīng)用推廣速度比較快[2]。Python編程語言開發(fā)以特定的問題為基礎(chǔ),選擇最有效的方式來解決問題[3]。Python編程語言具有一定的限制性,在編程中,不良的編程習(xí)慣會(huì)造成編程不能通過編譯[4]。例如:IF語句的下一行不向右縮進(jìn),在Python編程語言中,縮進(jìn)規(guī)是至關(guān)重要的一部分,相對于其他語言來說,Python編程語言最突出的特點(diǎn)是模塊界限,這主要是每行的首字符位置來決定的,但是其他語言,例如C語言等,則是通過“{}”來對于模塊界限進(jìn)行確定。
1.2語言優(yōu)點(diǎn)
Python編程語言的優(yōu)點(diǎn)比較多,使用Python編程語言簡單易學(xué),Python編程語言可以免費(fèi)使用,編程速度快,具有一定的可移植性和解釋性,具備一定的拓展性和可嵌入性[5]。
Python編程語言是一種簡單的思想語言,具有良好閱讀基礎(chǔ)的Python編程員在對Python編程的閱讀中,就像是在閱讀英語一樣,可以幫助編程員把握關(guān)鍵問題,解決問題,而不是研究語言本身。因?yàn)镻ython編程語言具有一定的簡單性,清楚明了,容易理解,所以學(xué)習(xí)Python編程語言難度也相對低一些,在Python編程語言中,包含說明文檔,能夠幫助理解[6]。Python編程語言底層通過C語言編寫,很多標(biāo)準(zhǔn)款、第三方庫都是借助C語言進(jìn)行編寫,所以運(yùn)行速度比較快。此外,Python編程語言也是FLOSS的重要祖晨部分,應(yīng)用這可以自由發(fā)布軟件拷貝,對相應(yīng)源代碼進(jìn)行閱讀和改動(dòng),且能夠?qū)⑵鋺?yīng)用到軟件中。開源本質(zhì)讓Python編程語言可以被移植到更多的平臺(tái)中。Python編程語言是編譯性語言,能夠?qū)⒃次募D(zhuǎn)換到用戶計(jì)算機(jī)所使用的語言中。這一過程通過編譯器和不同標(biāo)記、選項(xiàng)等共同完成。在對程度進(jìn)行運(yùn)行中,連接軟件對用戶程序復(fù)制和內(nèi)存運(yùn)行都有一定幫助。借助Python編程語言編寫的程序不需要進(jìn)行二進(jìn)制編譯就可以在源代碼中進(jìn)行相應(yīng)程序的運(yùn)行。計(jì)算機(jī)內(nèi)部,Python編程語言解釋器可以將源代碼進(jìn)行轉(zhuǎn)換,使其成為字節(jié)碼中間形式,再將其翻譯成計(jì)算機(jī)語言運(yùn)行,能夠讓Python編程語言應(yīng)用變得更加簡單,程序移植也更加簡單。Python編程語言支持面向過程編輯,也能夠支持面向?qū)ο缶幊?,在向過程中語言中,程序通過過程或使用重用代碼函數(shù)構(gòu)建。在面向?qū)ο笳Z言中,Python編程語言包含功能和數(shù)據(jù)組合對象。Python編程語言的可拓展性能夠讓語言嵌入到其他語言中,可以提供必要的基本功能。
2.基于Python的混合語言編程
2.1混合語言編程軟件結(jié)構(gòu)框架
Python編程語言應(yīng)用到混合語言編程中,一種是進(jìn)行拓展,另一種是通過嵌入來實(shí)現(xiàn)。其中,拓展是通過從C語言實(shí)現(xiàn)對Python的拓展,需要從相應(yīng)編程語言中進(jìn)行對應(yīng)模塊功能的調(diào)取和應(yīng)用。而嵌入的實(shí)現(xiàn)主要是通過Python解釋器來實(shí)現(xiàn)的,通過Python解釋器在相應(yīng)程序中應(yīng)用來實(shí)現(xiàn),這樣相應(yīng)的應(yīng)用程序可以解釋Python的腳本程序,確保編程目標(biāo)的實(shí)現(xiàn)。
2.2典型程序結(jié)構(gòu)
在C語言源程序中,Python拓展模塊具備一定的代表性,例如:Python.h頭文件,文件在Python的所有內(nèi)部數(shù)據(jù)結(jié)構(gòu)以及函數(shù)原型都可以進(jìn)行定義;但是同時(shí)也需要定義一個(gè)例外對象,這一個(gè)對象主要是針對例外對象來說的。這一模塊主要是對函數(shù)的實(shí)現(xiàn)方式進(jìn)行定義,通過函數(shù)來將參數(shù)表示的Python對象進(jìn)行轉(zhuǎn)換,使其如何C語言程序的格式要求,在處理好格式后,轉(zhuǎn)換成Python對象,最后傳回Python解釋器。如果這一過程中出現(xiàn)異常問題,則可以借助已經(jīng)設(shè)定的例外對象實(shí)現(xiàn)返回。在源程序中,需要對拓展模塊定義的函數(shù)名以及函數(shù)實(shí)現(xiàn)對應(yīng)關(guān)系列表,以此來實(shí)現(xiàn)相應(yīng)拓展模塊的函數(shù)初始化操作。除了一般的手工代碼編寫途徑,還能選擇通過自動(dòng)化工作來實(shí)現(xiàn),可以借助SWIG,通過對現(xiàn)有的代碼進(jìn)行掃描,自動(dòng)生成需要的代碼,這樣做也可以在一定程度上促進(jìn)遺留代碼轉(zhuǎn)化效率提升。現(xiàn)階段,SWIG在很多大型科學(xué)計(jì)算項(xiàng)目開發(fā)中都有很好的應(yīng)用效果。相對于一般模塊化的拓展來說,Python中嵌入應(yīng)用程序,可以結(jié)合具體的嵌入目的差異來實(shí)現(xiàn),為用戶提供多種選擇,這些嵌入還會(huì)對應(yīng)用程序?qū)S猛卣巩a(chǎn)生影響,所以,嵌入的實(shí)現(xiàn)相對更為繁瑣,其主要原理則是通過Python提供的C?API來實(shí)現(xiàn)數(shù)據(jù)格式轉(zhuǎn)化,借助例外處理的方式來實(shí)現(xiàn)程序設(shè)計(jì)目標(biāo)。
2.3?Python與C/C++實(shí)現(xiàn)混合編程的程序設(shè)計(jì)要點(diǎn)
Python自身存在一定的不足,Ctypes?是一個(gè)為?Python?準(zhǔn)備的外部函數(shù)庫。它提供兼容C的數(shù)據(jù)類型,并允許調(diào)用DLL或共享庫中的函數(shù)。通過它,可以使用純粹的?Python?包裝這些函數(shù)庫。下面就分享一部分Python與C/C++實(shí)現(xiàn)混合編程的程序設(shè)計(jì):
在vs2017新建一個(gè)空文件testpy3,新建文件test.c和math_test.py
//test.c
#include?<Python.h>
int?main(int?argc,?char?*argv[])
{
//設(shè)定參數(shù)值
int?a=3;
int?b=6;
//初始化
Py_SetProgramName(argv[0]);
Py_Initialize();
//測試python3的打印語句
PyRun_SimpleString("print('Hello?Python!')\n");
//執(zhí)行import語句,把當(dāng)前路徑加入路徑中,為了找到math_test.py
PyRun_SimpleString("import?os,sys");
PyRun_SimpleString("sys.path.append('./')");
//測試打印當(dāng)前路徑
PyRun_SimpleString("print(os.getcwd())");
PyObject?*pModule;
PyObject?*pFunction;
PyObject?*pArgs;
PyObject?*pRetValue;
//import?math_test
pModule?=?PyImport_ImportModule("math_test");
if(!pModule){
printf("import?python?failed?。。躰");
return?-1;
}
//對應(yīng)math_test.py中的def?add_func(a,b)函數(shù)
pFunction?=?PyObject_GetAttrString(pModule,?"add_func");
if(!pFunction){
printf("get?python?function?failed?。。。躰");
return?-1;
}
if(!pModule){
printf("import?python?failed?。。躰");
return?-1;
}
Py_Finalize();
//方便查看
while(1);
return?0;
}
通過Python與C/C++實(shí)現(xiàn)混合編程,用C或C++改寫關(guān)鍵部分,可以提高運(yùn)行速度。
參考文獻(xiàn)
[1] 劉曜碩.Python與R語言混合編程方法的實(shí)踐[J].電子技術(shù)與軟件工程,2021(5):40-41.
[2] 韓婷,劉暢,趙若晗,等.基于C語言和MATLAB的混合編程在醫(yī)學(xué)圖像處理課程中的應(yīng)用[J].軟件,2018,39(10):26-29.
[3]? 宮薇薇,齊向春,裴世廉.?Python與R語言混合編程方法的研究和應(yīng)用[J].?計(jì)算機(jī)應(yīng)用與軟件,2018,35(1):28-31.
[4] 潘俊男.三種語言在N體模擬中的計(jì)算效率比較研究[D].?大理:大理大學(xué),2021.
[5] 劉正.?積木式python編程系統(tǒng)的研究與實(shí)現(xiàn)[D].?北京:北京郵電大學(xué),2020.
[6] 耿穎.使用Python語言的GUI可視化編程設(shè)計(jì)[J].?單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2019,19(2):20-22,44.