Python中的ctypes模块可能是Python调⽤C⽅法中最简单的⼀种。ctypes模块提供了和C语⾔兼容的数据类型和函数来加载dll⽂件,因此在调⽤时不需对源⽂件做任何的修改。也正是如此奠定了这种⽅法的简单性。⽰例如下
实现两数求和的C代码,保存为add.c
//sample C file to add 2 numbers - int and floats#include 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 integers res_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_float print \"Sum of 5.5 and 4.1 = \ 输出如下 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中对对象进⾏操作。 以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。 因篇幅问题不能全部显示,请点此查看更多更全内容