最近在学习如何将c++的代码嵌入到python中,网上的方法很多,这里先介绍了解到两种方式:ctypes和Cython。
ctypes是python里的包,Cython是python的超集,也可以将其理解成新的语言,与纯python的区别就是可以定义变量的类型,类似c语言,主要是为了提升性能,具体可以参考:
对于ctypes模块,其是Python标准库中提供的一个用于调用C语言动态链接库的模块。
关于动态链接库可以参考:
程序员的自我修养–链接、装载与库笔记:动态链接:
彻底搞懂动态库、静态库、运行时库、引入库之间的区别:
使用ctypes模块的步骤如下:
1 导入ctypes模块
2 定义C语言函数的返回类型和参数类型
3 调用C语言函数
上面的案例比较简单,少了编译成.dll/.so文件的步骤,可以参考:
DLL的生成与加载(c++、java、python):
python与c混合编程:
对于cython,其是一个将Python代码转换为C语言代码的工具。它允许我们在Python代码中使用C语言的特性,并将其编译成高效的机器码。使用Cython的步骤如下:
1 安装Cython模块
2 创建一个.pyx文件,并将需要使用C语言的代码放入其中
3 编写一个setup.py文件,用于将.pyx文件编译成C语言的扩展模块
编译并安装扩展模块
在Python代码中导入扩展模块,并调用C语言函数
对于Cython也是将文件编译成.so后再进行调用,不过比ctypes多了一种方式,就是用pyximport来直接调用,具体可以参考:
源文件和编译:
编译Cython代码的方式
关于C++,可以参考:
在 Cython 中使用 C :
Cython与C/C的交互
浅谈Python程序与C++程序的联合使用:
总的来说:ctypes模块允许Python代码直接调用C语言函数,适用于只需要调用少量C语言函数的情况;Cython模块可以将Python代码转换成C语言代码,并编译成高效的机器码,适用于需要将大量Python代码转换为C语言的情况。
参考: