- 論壇徽章:
- 0
|
大家好,我是本書的作者,若抽選到參與獎(jiǎng),請(qǐng)?zhí)^。
不過我可以回答一下這些問題,
1,您在工作中使用Python做啥工作?
我工作的內(nèi)容大致分為三種:MCU、DSP嵌入式開發(fā),工控軟件開發(fā),一些控制和信號(hào)處理的算法研究
嵌入式開發(fā)
********
開發(fā)嵌入式程序主要是C語言和少量匯編,但是Python也派上了大用處,例如可以用它先模擬算法,設(shè)計(jì)濾波器,繪圖。也可以設(shè)計(jì)一些調(diào)試工具,例如通過串口、CAN通信實(shí)時(shí)觀察芯片內(nèi)存中的數(shù)據(jù),有時(shí)候調(diào)試比較復(fù)雜的東西時(shí),甚至可以用pywinauto自動(dòng)化界面操作,按照一定邏輯排查錯(cuò)誤。在這些工作中,Python起到輔助作用。
工控軟件開發(fā)
*********
工控軟件開發(fā)主要是通過一些AD,DA,DIO,電機(jī)驅(qū)動(dòng)擴(kuò)展卡,監(jiān)控傳感器,控制電機(jī),讀取并分析數(shù)據(jù)。這些程序原先是采用VC 6.0編寫的,界面設(shè)計(jì)一直很成問題,一個(gè)好的繪圖控件都沒有。后來我改用C#,提高了一些開發(fā)效率,但是C#語法比較麻煩,一段時(shí)間不接觸就忘記了。后來就改用Python,問題是那些擴(kuò)展卡都沒有Python的演示程序,因此需要自己動(dòng)手用ctypes庫(kù)調(diào)用擴(kuò)展卡的DLL驅(qū)動(dòng)程序。一旦和擴(kuò)展卡打交道的程序?qū)懞弥,剩下的就是Python的強(qiáng)項(xiàng)了。
* 用PyQt, wx可以很方便地制作界面,界面要求不高時(shí),也可以用TraitsUI。
* 繪圖工具可以用Chaco, Mayavi, matplotlib,如果要求繪圖速度比較高的話,可以用guiqwt,這個(gè)是對(duì)Qt的qwt繪圖庫(kù)的包裝,速度要比其它的都快。
* 如果需要做圖像處理,那么OpenCV就派上用場(chǎng)了。
* 如果需要高效計(jì)算的話,一般可以用NumPy解決,解決不了的就用Cython或者SWIG寫一個(gè)擴(kuò)展。有時(shí)還需要用多進(jìn)程模塊multiprocessing。
* 數(shù)據(jù)存儲(chǔ)可以用sqlite,如果是大規(guī)模的數(shù)據(jù),可以用pyTable保存成HDF5格式。
使用Python能夠解決絕大部分的工控軟件的需求。
算法研究
******
Python開發(fā)快,比較適合研究算法,雖然執(zhí)行的時(shí)候會(huì)很慢,不過也可以通過NumPy, Cython或者尋找一些現(xiàn)成的擴(kuò)展庫(kù)改善。當(dāng)算法比較成型時(shí),再用C, C++改寫。
曾經(jīng)有一個(gè)模擬項(xiàng)目的動(dòng)態(tài)性比較高,用Python比較容易實(shí)現(xiàn),運(yùn)行速度雖然尚能接受,但是有時(shí)需要進(jìn)行上百次模擬運(yùn)行時(shí),就需要等待很長(zhǎng)時(shí)間了,因此決定用C++重寫。而我的C++水平有限,不知道該如何設(shè)計(jì),我最后采用Python動(dòng)態(tài)輸出C++代碼,調(diào)用C++編譯器編譯成DLL,然后通過ctypes動(dòng)態(tài)載入。由于每次根據(jù)用戶的設(shè)置都會(huì)生成C++代碼,因此使用的C++功能很基礎(chǔ),沒有繼承,虛函數(shù)等東西,我想能最大地提高程序的運(yùn)行速度。最終程序的運(yùn)行速度比Python版本提高了10-20倍(Python版本已經(jīng)足夠優(yōu)化,使用了NumPy, SciPy的一些高速運(yùn)算函數(shù),否則純粹的循環(huán)、判斷和數(shù)值運(yùn)算的話,C要比Python快幾百倍)。
2,你認(rèn)為Python相對(duì)于其他語言工作在處理你的工作的時(shí)候有優(yōu)勢(shì)有哪些?
* 擴(kuò)展庫(kù)非常豐富,而且都能看到源代碼,源代碼有時(shí)候比文檔更管用。
* 便攜性,我在U盤中安裝了一個(gè)portablepython,并將所有會(huì)用上的擴(kuò)展庫(kù)都放進(jìn)去了,這樣無論到哪臺(tái)機(jī)器上,都能運(yùn)行我的Python程序。
* Python語法優(yōu)美,用Python寫程序是一種享受。
3,談?wù)勀汩喿x完樣章的感受
這本書的編寫歷時(shí)近3年,是我在工作中自學(xué)的一個(gè)總結(jié),因此成書時(shí)間拖得比較久。如果真要寫的話,書中介紹的每個(gè)擴(kuò)展庫(kù)都可以寫出一本書來,因此這本書只能起到入門、打基礎(chǔ)的作用。讀者可了解到足夠多的庫(kù),但是具體到實(shí)際工作中的某個(gè)問題時(shí),還需要您自行查找文檔,甚至分析庫(kù)的源程序。在解決問題的同時(shí)所學(xué)習(xí)到的才是最有用、最牢固的。
也許您會(huì)懷疑花許多時(shí)間學(xué)習(xí)一門新的語言,以及那么多不太出名、甚至文檔都不全的擴(kuò)展庫(kù)是否值得。那么你可以看看我的經(jīng)驗(yàn):我在工作中一邊自學(xué)一邊用來做實(shí)際的項(xiàng)目,這幾年下來我感覺我的開發(fā)效率比用C#時(shí)高出3-4倍,比用VC時(shí)高出7-8倍。而我獲得的回報(bào)就是,每天都能不用加班,并且寫出了這本書,更重要的是,我還有更多的時(shí)間陪伴家人了。
歡迎到本書的論壇共同探討Python科學(xué)計(jì)算方面的問題。 http://www.zeuux.org/group/scipython/ |
|