盧紹兵
摘??要:Python屬于ABC語言替代品,能夠為語言編程提供高效、高級的數據結構,有效面對對象進行編程操作。Python編程語言的設計風格一般比較清晰統一,這使得Python編程語言能夠簡單易懂,維護起來也十分便利,所以被很多大眾所接受和喜歡,應用推廣速度比較快。Python是目前一種常用的腳本語言,在混合語言編程的軟件開發中具有很好的應用效果。該文對Python編程語言進行論述,研究Python編程語言的語言風格、語言優點等,并探究其在混合語言編程中的應用和實現。
關鍵詞:Python???混合語言編程???數據分析???軟件
中圖分類號:?TP313????文獻標識碼: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語言風格
Python屬于ABC語言替代品,能夠為語言編程提供高效、高級的數據結構,有效面對對象進行編程操作[1]。Python編程語言的設計風格一般比較清晰統一,這使得Python編程語言能夠簡單易懂,維護起來也十分便利,所以被很多大眾所接受和喜歡,應用推廣速度比較快[2]。Python編程語言開發以特定的問題為基礎,選擇最有效的方式來解決問題[3]。Python編程語言具有一定的限制性,在編程中,不良的編程習慣會造成編程不能通過編譯[4]。例如:IF語句的下一行不向右縮進,在Python編程語言中,縮進規是至關重要的一部分,相對于其他語言來說,Python編程語言最突出的特點是模塊界限,這主要是每行的首字符位置來決定的,但是其他語言,例如C語言等,則是通過“{}”來對于模塊界限進行確定。
1.2語言優點
Python編程語言的優點比較多,使用Python編程語言簡單易學,Python編程語言可以免費使用,編程速度快,具有一定的可移植性和解釋性,具備一定的拓展性和可嵌入性[5]。
Python編程語言是一種簡單的思想語言,具有良好閱讀基礎的Python編程員在對Python編程的閱讀中,就像是在閱讀英語一樣,可以幫助編程員把握關鍵問題,解決問題,而不是研究語言本身。因為Python編程語言具有一定的簡單性,清楚明了,容易理解,所以學習Python編程語言難度也相對低一些,在Python編程語言中,包含說明文檔,能夠幫助理解[6]。Python編程語言底層通過C語言編寫,很多標準款、第三方庫都是借助C語言進行編寫,所以運行速度比較快。此外,Python編程語言也是FLOSS的重要祖晨部分,應用這可以自由發布軟件拷貝,對相應源代碼進行閱讀和改動,且能夠將其應用到軟件中。開源本質讓Python編程語言可以被移植到更多的平臺中。Python編程語言是編譯性語言,能夠將源文件轉換到用戶計算機所使用的語言中。這一過程通過編譯器和不同標記、選項等共同完成。在對程度進行運行中,連接軟件對用戶程序復制和內存運行都有一定幫助。借助Python編程語言編寫的程序不需要進行二進制編譯就可以在源代碼中進行相應程序的運行。計算機內部,Python編程語言解釋器可以將源代碼進行轉換,使其成為字節碼中間形式,再將其翻譯成計算機語言運行,能夠讓Python編程語言應用變得更加簡單,程序移植也更加簡單。Python編程語言支持面向過程編輯,也能夠支持面向對象編程,在向過程中語言中,程序通過過程或使用重用代碼函數構建。在面向對象語言中,Python編程語言包含功能和數據組合對象。Python編程語言的可拓展性能夠讓語言嵌入到其他語言中,可以提供必要的基本功能。
2.基于Python的混合語言編程
2.1混合語言編程軟件結構框架
Python編程語言應用到混合語言編程中,一種是進行拓展,另一種是通過嵌入來實現。其中,拓展是通過從C語言實現對Python的拓展,需要從相應編程語言中進行對應模塊功能的調取和應用。而嵌入的實現主要是通過Python解釋器來實現的,通過Python解釋器在相應程序中應用來實現,這樣相應的應用程序可以解釋Python的腳本程序,確保編程目標的實現。
2.2典型程序結構
在C語言源程序中,Python拓展模塊具備一定的代表性,例如:Python.h頭文件,文件在Python的所有內部數據結構以及函數原型都可以進行定義;但是同時也需要定義一個例外對象,這一個對象主要是針對例外對象來說的。這一模塊主要是對函數的實現方式進行定義,通過函數來將參數表示的Python對象進行轉換,使其如何C語言程序的格式要求,在處理好格式后,轉換成Python對象,最后傳回Python解釋器。如果這一過程中出現異常問題,則可以借助已經設定的例外對象實現返回。在源程序中,需要對拓展模塊定義的函數名以及函數實現對應關系列表,以此來實現相應拓展模塊的函數初始化操作。除了一般的手工代碼編寫途徑,還能選擇通過自動化工作來實現,可以借助SWIG,通過對現有的代碼進行掃描,自動生成需要的代碼,這樣做也可以在一定程度上促進遺留代碼轉化效率提升。現階段,SWIG在很多大型科學計算項目開發中都有很好的應用效果。相對于一般模塊化的拓展來說,Python中嵌入應用程序,可以結合具體的嵌入目的差異來實現,為用戶提供多種選擇,這些嵌入還會對應用程序專用拓展產生影響,所以,嵌入的實現相對更為繁瑣,其主要原理則是通過Python提供的C?API來實現數據格式轉化,借助例外處理的方式來實現程序設計目標。
2.3?Python與C/C++實現混合編程的程序設計要點
Python自身存在一定的不足,Ctypes?是一個為?Python?準備的外部函數庫。它提供兼容C的數據類型,并允許調用DLL或共享庫中的函數。通過它,可以使用純粹的?Python?包裝這些函數庫。下面就分享一部分Python與C/C++實現混合編程的程序設計:
在vs2017新建一個空文件testpy3,新建文件test.c和math_test.py
//test.c
#include?<Python.h>
int?main(int?argc,?char?*argv[])
{
//設定參數值
int?a=3;
int?b=6;
//初始化
Py_SetProgramName(argv[0]);
Py_Initialize();
//測試python3的打印語句
PyRun_SimpleString("print('Hello?Python!')\n");
//執行import語句,把當前路徑加入路徑中,為了找到math_test.py
PyRun_SimpleString("import?os,sys");
PyRun_SimpleString("sys.path.append('./')");
//測試打印當前路徑
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!!\n");
return?-1;
}
//對應math_test.py中的def?add_func(a,b)函數
pFunction?=?PyObject_GetAttrString(pModule,?"add_func");
if(!pFunction){
printf("get?python?function?failed!!!\n");
return?-1;
}
if(!pModule){
printf("import?python?failed!!\n");
return?-1;
}
Py_Finalize();
//方便查看
while(1);
return?0;
}
通過Python與C/C++實現混合編程,用C或C++改寫關鍵部分,可以提高運行速度。
參考文獻
[1] 劉曜碩.Python與R語言混合編程方法的實踐[J].電子技術與軟件工程,2021(5):40-41.
[2] 韓婷,劉暢,趙若晗,等.基于C語言和MATLAB的混合編程在醫學圖像處理課程中的應用[J].軟件,2018,39(10):26-29.
[3]? 宮薇薇,齊向春,裴世廉.?Python與R語言混合編程方法的研究和應用[J].?計算機應用與軟件,2018,35(1):28-31.
[4] 潘俊男.三種語言在N體模擬中的計算效率比較研究[D].?大理:大理大學,2021.
[5] 劉正.?積木式python編程系統的研究與實現[D].?北京:北京郵電大學,2020.
[6] 耿穎.使用Python語言的GUI可視化編程設計[J].?單片機與嵌入式系統應用,2019,19(2):20-22,44.