• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python调用C语言的方法【基于ctypes模块】

python 搞代码 4年前 (2022-01-08) 36次浏览 已收录 0个评论

这篇文章主要介绍了Python调用C语言的方法,涉及Python基于ctypes模块调用C语言编译后的动态链接库文件相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python调用C语言的方法。分享给大家供大家参考,具体如下:

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){ 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 $<em style="color:transparent">来源[email protected]搞@^&代*@码网</em> 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中对对象进行操作。

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

以上就是Python调用C语言的方法【基于ctypes模块】的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python调用C语言的方法【基于ctypes模块】

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址