您的当前位置:首页正文

Python调用C语言的实现

2021-07-12 来源:年旅网
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$

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中对对象进⾏操作。

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容