python中的ctypes模組可能是python呼叫c方法中最簡單的一種。ctypes模組提供了和c語言相容的資料型別和函式來載入dll檔案,因此在呼叫時不需對原始檔做任何的修改。也正是如此奠定了這種方法的簡單性。
示例如下
實現兩數求和的c**,儲存為add.c
//sample c file to add 2 numbers - int and floats
#include
int add_int(int, int);
float add_float(float, float);
int awww.cppcns.comdd_int(int num1, int num2)
float add_float(float num1, float num2)
接下來將c檔案編譯為.so檔案(windows下為dll)。下面操作會生成adder.so檔案
#for linux
$ gcc -shared -wl,-soname,adder -o adpeijuemoider.so -fpic add.c
#for mac
$ gcc -shared -wl,-install_name,adder.so -o adder.so -fpic add.c
#for windows
$gcc -shared -wl,-soname,adder -o adder.dll -fpic add.c
現在在你的python**中來呼叫它
from ctypes import *
#load the shared object file
adder = cdll('./adder.so')
#find sum of integers
res_int = adder.add_int(4,5)
print "sum of 4 and 5 = " + str(res_int)
#find sum of floats
a = c_float(5.5)
b = c_float(4.1)
add_float = adder.add_float
add_float.restype = c_float
print "sum of 5.5 and 4.1 = ", str(add_float(a, b))
輸出如下
sum of 4 and 5 = 9
sum of 5.5 and 4.1 = 9.60000038147
在這個例子中,c檔案是自解釋的,它包含兩個函式,分別實現了整形求和和浮點型求和。
在python檔案中,一開始先導入c程式設計客棧types模組,然後使用cdll函式來載入我們建立的庫檔案。這樣我們就可以通過變數adder來使用c類庫中的函式了。當adder.add_int()被呼叫時,內部將發起乙個對c函式add_int的呼叫。ctypes介面允許我們在呼叫c函式時使用原生python中預設的字串型和整型。
而對於其他類似布林型和浮點型這樣的型別,必須要使用正確的ctype型別才可以。如向adder.add_float()函式傳參時, 我們要先將python中的十進位制值轉化為c_float型別,然後才能傳送給c函式。這種方法雖然簡單,清晰,但是卻很受限。例如,並不能在c中對物件進行操作。
本文標題: python呼叫c語言的實現
本文位址: /jiaoben/python/266870.html
C 呼叫Python語言
是一種在 net和 mono 上實現的 python 語言 2.開啟vs,新增兩個引用,在ironpython的安裝根目錄下面選擇ironpython.dll和microsoft.scripting.dll using microsoft.scripting.hosting using ironpy...
Python呼叫C語言
python中的ctypes模組可能是python呼叫c方法中最簡單的一種。ctypes模組提供了和c語言相容的資料型別和函式來載入dll檔案,因此在呼叫時不需對原始檔做任何的修改。也正是如此奠定了這種方法的簡單性。示例如下 實現兩數求和的c 儲存為add.c sample c file to ad...
Python對C 語言的呼叫
最近在做乙個專案,由於專案中的某些模組是用到c語言編寫好,要用python編寫指令碼,該例子已在ubuntu上實驗,並實驗成功。首先我們在 home ccode編寫乙個example.c檔案,例如 int test int n1,int n2 然後我們開啟終端,進入目錄中用gcc編譯該檔案 gcc ...