Python呼叫C語言

2022-08-24 08:09:14 字數 1781 閱讀 1854

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 add_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 adder.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檔案中,一開始先導入ctypes模組,然後使用cdll函式來載入我們建立的庫檔案。這樣我們就可以通過變數adder來使用c類庫中的函式了。當adder.add_int()被呼叫時,內部將發起乙個對c函式add_int的呼叫。ctypes介面允許我們在呼叫c函式時使用原生python中預設的字串型和整型。

而對於其他類似布林型和浮點型這樣的型別,必須要使用正確的ctype型別才可以。如向adder.add_float()函式傳參時, 我們要先將python中的十進位制值轉化為c_float型別,然後才能傳送給c函式。這種方法雖然簡單,清晰,但是卻很受限。例如,並不能在c中對物件進行操作。

C 呼叫Python語言

是一種在 net和 mono 上實現的 python 語言 2.開啟vs,新增兩個引用,在ironpython的安裝根目錄下面選擇ironpython.dll和microsoft.scripting.dll using microsoft.scripting.hosting using ironpy...

C語言不能呼叫Python

c語言是結構化程式設計語言,python是物件導向的語言,二者之間有條 代溝 python呼叫c語言,沒有問題,這叫 向下相容 但是,反過來則不行,不許c呼叫python,那叫 以下犯上 敢這樣說,是因為我有實驗的證據。為了mt4程式設計的需要,我用lcc編譯的程式呼叫python,結果,撞上了南牆...

python 呼叫c語言函式

雖然python是萬能的,但是對於某些特殊功能,需要c語言才能完成。這樣,就需要用python來呼叫c的 了 具體流程 c編寫相關函式 編譯成庫 然後在python中載入這些庫,指定呼叫函式。這些函式可以char int,float,還能返回指標。以下示例 通過python呼叫c函式,返回 hell...