国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python調用C語言的方法【基于ctypes模塊】

2020-02-22 22:56:23
字體:
來源:轉載
供稿:網友

本文實例講述了Python調用C語言的方法。分享給大家供大家參考,具體如下:

Python中的ctypes模塊可能是Python調用C方法中最簡單的一種。ctypes模塊提供了和C語言兼容的數據類型和函數來加載dll文件,因此在調用時不需對源文件做任何的修改。也正是如此奠定了這種方法的簡單性。

示例如下

實現兩數求和的C代碼,保存為add.c

//sample C file to add 2 numbers - int and floats#include <stdio.h>int add_int(int, int);float add_float(float, float);int add_int(int num1, int num2){  return num1 + num2;}float add_float(float num1, float num2){  return num1 + 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 fileadder = CDLL('./adder.so')#Find sum of integersres_int = adder.add_int(4,5)print "Sum of 4 and 5 = " + str(res_int)#Find sum of floatsa = c_float(5.5)b = c_float(4.1)add_float = adder.add_floatadd_float.restype = c_floatprint "Sum of 5.5 and 4.1 = ", str(add_float(a, b))

輸出如下

Sum of 4 and 5 = 9Sum 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中對對象進行操作。

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临澧县| 达尔| 饶河县| 荥阳市| 南召县| 嘉祥县| 邻水| 乌兰浩特市| 昭苏县| 曲麻莱县| 南木林县| 株洲县| 泾川县| 顺义区| 河间市| 安平县| 武功县| 金门县| 岑巩县| 古田县| 广元市| 锡林浩特市| 乾安县| 灵武市| 嘉义市| 兴隆县| 隆回县| 仁化县| 杂多县| 哈巴河县| 磴口县| 永清县| 什邡市| 临朐县| 淮安市| 巴马| 绥江县| 迁西县| 克什克腾旗| 蕲春县| 天水市|