〈詳解〉Python3呼叫C程式
python為什麼要呼叫c ?
python不擅長”大量運算”任務;
python程式優勢在於:編寫簡單,適合”IO密集型作業”(比如開啟檔案,下載圖片,執行指令碼).python作為知名的”膠水語言”,快速實現”計算密集型作業”的方法就是”把c的程式碼拿過來直接用”!
python呼叫c語言程式碼的方式十分簡單,只需四步:
1.將.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
",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()
相關文章
- C#呼叫Windows API詳解(上)C#WindowsAPI
- C#呼叫Delphi的dll之詳解C#
- lua呼叫c程式C程式
- Python3中urlopen()詳解Python
- Action呼叫字首詳解
- C程式函式呼叫&系統呼叫C程式函式
- 從 C/C++ 程式呼叫 Java 程式碼C++Java
- Python3 檔案操作詳解Python
- Android呼叫WebService詳解AndroidWeb
- Python3 pickle模組的使用詳解Python
- Python3 加密解密技術詳解Python加密解密
- Python3 queue佇列模組詳解Python佇列
- Webservice呼叫方式:axis,soap詳解Web
- AndroidJS相互呼叫詳解AndroidJS
- android使用JNI呼叫C,C++程式AndroidC++
- Python3中strip()、lstrip()、rstrip()用法詳解Python
- Python3之正規表示式詳解Python
- 用Python3傳送郵件詳解Python
- C# 呼叫Python程式碼C#Python
- C#/.net程式呼叫pythonC#Python
- 詳解SSH 框架中物件呼叫流程框架物件
- 詳細講解函式呼叫原理函式
- Java RMI遠端方法呼叫詳解Java
- Android平臺呼叫WebService詳解AndroidWeb
- 詳解 Qt 呼叫 DLL功能函式QT函式
- 如何呼叫程式碼在python3中改變函式值?Python函式
- C/C++位元組詳解C++
- Python3序列賦值、序列解包詳解(下)Python賦值
- Python3中使用PyMongo的方法詳解PythonGo
- Python3中*和**運算子的用法詳解!Python
- Swift如何呼叫Objective-C程式碼SwiftObjectC程式
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- 詳解C++引用C++
- C# BackgroundWorker 詳解C#
- C++ Virtual詳解C++
- C# 反射詳解C#反射
- C#–特性詳解C#
- C#-反射詳解C#反射