膠水語言
python為什麼要調用c ?
c與python對比
python不擅長"大量運算"任務;
python程式優勢在于:編寫簡單,适合"IO密集型作業"(比如打開檔案,下載下傳圖檔,運作腳本).python作為知名的"膠水語言",快速實作"計算密集型作業"的方法就是"把c的代碼拿過來直接用"!
python調用c語言代碼的方式十分簡單,隻需四步:
1.将 .c
字尾的檔案編譯為動态庫檔案( .so
結尾)
.c
.so
格式
- gcc 原檔案名.c -shared -o 新檔案名.so
示例
- 以将
編譯為c_dll.c
為例c_dll.so
gcc c_dll.c -shared -o c_dll.so
2.在python檔案中導入頭檔案
-
from ctypes import *
3.在python中引入c動态庫,并用變量接收動态庫的引用
- 變量名 = cdll.LoadLibrary("動态庫檔案路徑")
-
result = cdll.LodaLibrary("./c_dll.so")
4.調用動态庫方法
- 動态庫引用.庫函數(參數)
-
result.my_add(num)
附源碼:
c_add.py
import time
from ctypes import *
def main():
num = int(input("請輸入整數值:"))
result = 0
start_time = time.time()
result = cdll.LoadLibrary("./c_dll.so")
result.my_add(num)
end_time = time.time()
print("總共用時%s"%(end_time-start_time))
if __name__ == "__main__":
main()
c_dll.c
#include<stdio.h>
void my_add(int num){
long int result = 0;
for (long int i=1; i<=num; i++){
result += i;
}
printf("從1到%d累加的計算結果為%ld\n",num,result);
}
最終檔案目錄
python_add.py
import time
def main():
num = int(input("請輸入整數值:"))
result = 0
start_time = time.time()
for i in range(num+1):
result += i
print("從1到%d累加的計算結果為%d"%(num,result))
end_time = time.time()
print("總共用時%s"%(end_time-start_time))
if __name__ == "__main__":
main()