pythonc函式 在Python中使用C函式

2021-10-25 19:42:28 字數 965 閱讀 2489

我已經嘗試過網際網路上提到的所有解決方案,但沒有乙個對我有效。在

我有乙個python**,為了加快速度,我希望我的**在c函式中執行繁重的計算。

我已經寫了這個c函式。在

然後,為了共享這個庫,我在終端做了這個:gcc -shared -wl,-install_name,testlib.so -o testlib.so -fpic mymodule.c

它不會返回錯誤。當我試圖用python啟動c函式時,問題就出現了。讓我們考慮一下c語言中的以下簡單函式:

^$我啟動python3(3.5.2),然後:import ctypes

zelib = ctypes.cdll("/users/longeard/desktop/codes/draii/testlib.so",ctypes.rtld_global)

庫應該準備好在python中使用,方法是:res = zelib.multiplier(2,3)

執行此操作時,它會起作用,python會返回6

問題是,我要使用的函式(我使用的乘法器函式僅用於示例)應該以float作為輸入並返回乙個float。但如果我現在考慮與之前相同的乘數函式,但使用浮點:float multiplier(float a, float b)

float lol = 0.0;

lol = a*b;

return lol;

我使用gcc重新編譯,重新匯入ctypes並重新編譯ctypes.cdll,我在《python3》裡說:zelib.multiplier(ctypes.c_float(2),ctypes.c_float(3))

(types.c_float用於將python中的2轉換為c中的float),python將返回:2

這很奇怪,因為如果我在函式中新增printf來列印lol,python將列印:6.0

但有時還是返回2或18。即使我列印並返回相同的變數「lol」。在

我試了很多東西,但都不管用。有人有主意嗎?謝謝您。在

python c函式 三大基礎函式

在python中有三個基礎函式,分別是filter map 和reduce 他們分別為我們提供過濾 對映和聚合的功能。上一節我們簡單的使用了filter 函式結合匿名函式,下面我們會詳細介紹它的用法。1.filter 函式 在資料篩選和過濾的時候我們通常會採用filter 函式幫助我們快速的解決問題...

protocol buffer在python中使用

2.然後將potoc 3.0.0 win32.zip下 檔案 protoc.exe,放到protobuf python 3.0.0 protobuf 3.0.0 src中,在cmd 下在資料夾protobuf python 3.0.0 protobuf 3.0.0 python下依次執行 pytho...

pytho函式星號引數

神奇的星號 傳遞實參和定義形參 所謂實參就是呼叫函式時傳入的引數,形參則是定義函式是定義的引數 的時候,你還可以使用兩個特殊的語法 呼叫函式時使用 test args 的作用其實就是把序列 args 中的每個元素,當作位置引數傳進去。比如上面這個 如果 args 等於 1,2,3 那麼這個 就等價於...