<轉帖子請註明出處>python
①軟件專業性增強。許多的軟件都要作軟件工程,要團隊進行合做開發,單打獨鬥已經沒法開發出功能很強的軟件;這類程序員對某個編程軟件要很是精通,但對其餘的軟件程序員
②我的編制一些對工做有幫助的軟件。這類軟件並不要求很高的安全性。方便快捷是它的特色。這類程序員因此的編程語言不少,不少語言都懂一些,但不專精。數據庫
Python:編程
Python在工做中用的不少:擴展庫較多、語法簡潔、能夠邊用邊寫腳本、能夠很是的方便。安全
可是有一個問題很讓人困擾:要進行大規模的數據計算的時候,運行時間太長讓人難以忍受。網絡
網上查找了不少的資料,有不少的加快python的方法:編程語言
+ pysco: 好像速度提高不錯,可是2.7以上再也不支持,主要緣由是它太佔用資源,因此python社區把它給放棄了;函數
+ pypy:另外再搞一個python? NO! 很明顯,我要放棄不少CPYTHON中支持的資源。學習
+cython: 這貨基本就是C語言語法、python語法的綜合體。同時考慮兩種語言,寫程序的時候是否是更容易出錯?放棄。測試
Freebasic:
這個是讓我興奮而有傷感的語言。
興奮的理由:FreeBasic支持東西太多了:跨平臺、語法基本同傳統的BASIC,不存在語言上的學習難度、支持指針、支持類(簡易)、動態庫dll,so編寫、編譯速度快、運行速度快(GCC至關)、幫助文件很是全面,幾乎全部問題在幫助文件上能夠找到、持庫不少:圖形、數據庫、遊戲等等。簡單來講,這貨就是一個basic語法的C語言!
傷感的理由:這麼功能全面,體積很小的軟件在國內居然看不到有熱鬧的論壇!可是國外卻有很多。好像國內程序猿的素質都很高,都去作網絡應用去了,不屑於搞這個了(好吧,看看如今國內軟件體積有多麼龐大就知道了)。
好的,下面它就要出場了。看看它是多麼的簡潔,強大!
好吧,我考慮的思路仍是讓python直接調用底層的dll來加快速度。網上也有很多這樣的示例。用ctypes調用C編寫的dll動態庫。
若是你對C很是精通,那就跳過;若是你想更簡單一點的話,就看個人示例吧。
Freebasic 的 函數編制中加入 「export」關鍵字就能夠導出一個標註的.dll,.so庫了。
程序以下:
如下文件名稱爲dll.bas
'1.函數test Function test Cdecl Alias "test"( byval operand1 as integer, byval operand2 as integer ) as integer export 'OK!-按值傳遞 '調用示例 'from ctypes import * ' '#libtest=CDLL("D:\pythonUser\dll.dll") 'libtest=cdll.LoadLibrary("D:\pythonUser\dll.dll") 'print libtest.test(10,12) '結果爲-2 ' Return operand1 - operand2 end Function '2.函數test3 Function test3 Cdecl Alias "test3"( operand1 as integer, operand2 as integer ) as integer export 'OK!-按地址傳值 '調用示例 'from ctypes import * ' '#libtest=CDLL("D:\pythonUser\dll.dll") 'libtest=cdll.LoadLibrary("D:\pythonUser\dll.dll") 'print libtest.test3(10,12) '結果爲-2 Return operand1 - operand2 end Function '3.函數test2 Function test2 Cdecl ( byval operand1 as integer, byval operand2 as integer ) as integer export ' 錯誤:導出函數沒有別名「alias」,沒法被python找到函數名 ' ctypes 導入時正確 ' 可是調用 print libtest.test2(10,12)時,沒法找到函數名 ' Traceback (most recent call last): '----------python 錯誤列表--------------------- ' File "<stdin>", line 1, in <module> ' File "C:\Python27\lib\ctypes\__init__.py", line 378, in __getattr__ ' func = self.__getitem__(name) ' File "C:\Python27\lib\ctypes\__init__.py", line 383, in __getitem__ ' func = self._FuncPtr((name_or_ordinal, self)) ' AttributeError: function 'test2' not found '----------------------------------------------- Return operand1 - operand2 end Function
'編譯:
'C:\Program Files\FreeBASIC\fbc -s gui -dll -export "dll.bas"
'生成 dll.dll 連接庫
把dll.dll文件放到 c:\python27 安裝目錄下,
from ctypes import * libtest=CDLL("dll.dll") print libtest.test(10,12)
也一樣能夠!
你看是否是很簡單?能夠說是完美!
經測試,一樣的代碼,dll能夠提升5倍左右的速度。畢竟是GCC級的編譯水平嘛。
但願可以對您的編程起到幫助做用!