Python调用C语言的方法【基于ctypes模块】
本文实例讲述了Python调用C语言的方法。分享给大家供大家参考,具体如下:
Python中的ctypes模块可能是Python调用C方法中最简单的一种。ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此在调用时不需对源文件做任何的修改。也正是如此奠定了这种方法的简单性。
示例如下
实现两数求和的C代码,保存为add.c
//sampleCfiletoadd2numbers-intandfloats #includeintadd_int(int,int); floatadd_float(float,float); intadd_int(intnum1,intnum2){ returnnum1+num2; } floatadd_float(floatnum1,floatnum2){ returnnum1+num2; }
接下来将C文件编译为.so文件(windows下为DLL)。下面操作会生成adder.so文件
#ForLinux $gcc-shared-Wl,-soname,adder-oadder.so-fPICadd.c #ForMac $gcc-shared-Wl,-install_name,adder.so-oadder.so-fPICadd.c #Forwindows $ gcc-shared-Wl,-soname,adder-oadder.dll-fPICadd.c
现在在你的Python代码中来调用它
fromctypesimport* #loadthesharedobjectfile adder=CDLL('./adder.so') #Findsumofintegers res_int=adder.add_int(4,5) print"Sumof4and5="+str(res_int) #Findsumoffloats a=c_float(5.5) b=c_float(4.1) add_float=adder.add_float add_float.restype=c_float print"Sumof5.5and4.1=",str(add_float(a,b))
输出如下
Sumof4and5=9 Sumof5.5and4.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程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。