CTypes
Python 中的 ctypes 模块可能是 Python 调用 C 方法中最简单的一种。ctypes 模块提供了和 C 语言兼容的数据类型和函数来加载 dll 文件,因此在调用时不需对源文件做任何的修改。也正是如此奠定了这种方法的简单性。
示例如下
实现两数求和的C代码,保存为 add.c
:
接下来将C文件编译为 .so
文件(windows 下为 DLL)。下面操作会生成 adder.so
文件:
现在在你的Python代码中来调用它
输出如下
在这个例子中,C 文件是自解释的,它包含两个函数,分别实现了整形求和和浮点型求和。
在Python文件中,一开始先导入 ctypes 模块,然后使用 CDLL 函数来加载我们创建的库文件。这样我们就可以通过变量 adder
来使用 C 类库中的函数了。当 adder.add_int()
被调用时,内部将发起一个对 C 函数 add_int
的调用。ctypes 接口允许我们在调用 C 函数时使用原生 Python 中默认的字符串型和整型。
而对于其他类似布尔型和浮点型这样的类型,必须要使用正确的 ctype 类型才可以。如向 adder.add_float()
函数传参时, 我们要先将Python中的十进制值转化为 c_float 类型,然后才能传送给 C 函数。这种方法虽然简单,清晰,但是却很受限。例如,并不能在 C 中对对象进行操作。
最后更新于