Python学习【101】:Python速度慢?试试这3个超实用的性能优化方案!
Python语言语法简单,容易上手。而且Python社区众多,不断为它的健康发展提供新的功能模块,在当前的大数据、人工智能领域独领风骚。那么,Python有没有缺点呢?从辩证思维角度看,很少有一种东西是绝对的完美。Python最让人诟病的是运行效率慢,其实理解这一点也很简单,越是高级的东西,距离底层计算机知识越远。毕竟计算机本质上是二进制的0、1,所有的高级语言都是通过编译器逐渐远离底层。比如我们常说的最底层的属于机器语言,上面是汇编语言,再上面是C语言。而包括Python语言在内的多数语言都是距离底层越来越远,毕竟为了使用方便,或者说提升了编写程序的效率。怎么解决Python执行效率低的问题,之前我们提过用codon技术。本质上codon是让python向C语言靠拢,利用C语言强大的执行效率弥补其不足。本文继续这个话题,python提升性能采用封装C的三种方法。2.1 使用 ctypes 库(最简单,无需编译)这是 Python 自带的标准库,适用于调用已有的动态链接库(.dll 或 .so)。不需要编写额外的 C 代码来包装,直接在 Python 里加载并调用即可。适用场景: 已经有编译好的 C 库,只想简单调用函数,不在乎性能极致优化。优点: 纯 Python 实现,无需编译,跨平台。缺点: 无法封装复杂的 C 结构体或回调,性能一般。- 编写 C 代码并编译:

编译成动态库(Linux/macOS):gcc -shared -o libexample.so -fPIC example.c其实上述语句是有点小问题的,在linux下动态链接库是.so,而当前是在windows下,实际上应该是.dll。实测在windows下无论是人为.so或者.dll都可以运行成功,但我们要知道本质上它就是.dll。
2.2 使用 Cython(最推荐,语法接近 Python)Cython 是一个 Python 的超集,允许你在 .pyx 文件中混合写 Python 和 C 代码。它会将代码编译成 C 扩展模块(.so 或 .pyd),性能极高。l适用场景: 需要编写高性能计算代码,或者将复杂的 C/C++ 库封装给 Python 用。l优点: 语法灵活,性能极好,可以无缝混合 Python 和 C 类型。- 编写 Cython 文件 (example.pyx):

- 编译:
python setup.py build_ext --inplace --compiler=mingw32
2.3 使用 Python 原生 C 扩展(最底层,性能最好)直接使用 Python 的 C API(Python.h)编写扩展模块。这是最“硬核”的方法,也是 os.environ 这种底层模块的实现方式。l适用场景: 需要极致的性能控制,或者编写 Python 解释器级别的扩展。l缺点: 代码繁琐,容易出错(内存管理),开发效率低。
l如果只是调用现成的 .dll,用 ctypes。l如果想写高性能 Python 库(比如算法加速),用 Cython。l如果你在开发 Python 解释器或极其底层的库,才用原生 C 扩展。本文通过编写python封装C程序的三种方法,是在探讨一种能够提升python性能的路径。我们可以设想,在一个项目中,把某些核心功能用C接口程序完成,主体用python编写。这样既能保证快速完成代码编写,还提升了整体执行效率。