时间:2021-05-22
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 = 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中对对象进行操作。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C语言可以调用python,C如何调用python呢?调用后如何调试呢?小编与大家分享操作经验。(一)C语言调用python首先,C语言中调用python,要使
问题你想在C中安全的执行某个Python调用并返回结果给C。例如,你想在C语言中使用某个Python函数作为一个回调。解决方案在C语言中调用Python非常简单
本文实例讲述了Python实现的调用C语言函数功能。分享给大家供大家参考,具体如下:实例参考pythoncookbook中的15.1节中的例子P612页先把c文
本文实例讲述了Python通过调用有道翻译api实现翻译功能。分享给大家供大家参考,具体如下:通过调用有道翻译的api,实现中译英、其他语言译中文Python代
原理python没有办法直接和c++共享内存交互,需要间接调用c++打包好的库来实现流程C++共享内存打包成库python调用C++库往共享内存存图像数据C++