zl程序教程

您现在的位置是:首页 >  Python

当前栏目

Python这几个库,快到飞起!

2023-04-18 14:51:26 时间

大家好,我是一行

最近看到知乎有这么一个问题,有哪些Python库让你相见恨晚?

作为Python老司机来说,这样的库不要太多了,从地图绘制到算法优化、从调试工具到代码分析,python的生态里有大量的库资源可以给Pythoner使用

但是对于不太了解的python人们,总会评价说python解释性语言运行速度慢吧啦吧啦的

所以一行这里分享几个高性能Python库/框架,下次再遇到这种评价,直接就把这些库/框架怼到他脸上

1Cython

Cython结合了Python和C的语法,可以简单的认为就是给Python加上了静态类型后的语法,用户可以使用大部分的Python语法,而不需要大幅度调整主要的程序逻辑与算法。

由于代码会直接编译为二进制程序,所以性能较Python会有极大提升

Cython会将源代码转译成C或C++语法后,自动包装上函数调用界面生成.pyd(或 .so ,因操作系统而异)后缀的二进制档,所以可当成普通的Python库。

Cython性能虽然逊于本地的C/C++库,但由于Cython语法的易用性可以缩短开发时间,同时Cython也可以用于将C/C++代码封装为Python库

定义变量可以使用关键字cdef定义变量

cdef int a = 1

定义函数可以使用关键字def、cdef、或cpdef定义函数

cdef int f(int x):
    return x + 1

使用关键字cdef定义的函数,会被Cython编译成C语言,所以速度较快,但无法被Python使用;只有使用def或cpdef定义的函数可以在Python中使用。

2PyPy

PyPy是一种Python编程语言实现,因为是一种即时编译器,就是在代码执行过程中编译,所以速度要比CPython快的多

通过速度对比,PyPy平均要比CPython快4.2倍

就连Python作者吉多都说过,如果你想让代码更快一些,应该去使用PyPy

"If you want your code to run faster, you should probably just use PyPy."

-- Guido van Rossum (creator of Python)

但是要注意,只有一种情况PyPy是无法加速Python的运行

那就是代码原本运行时间就不到几秒钟,这种情况下是显现不出来PyPy的作用

3Stackless Python

Stackless Python或称简称Stackless,是一个Python编程语言解释器,这么称呼的原因是它避免了依赖C调用栈为自己的堆栈。

Stackless Python的最突出特征是微线程,就是说一个运行的程序被分解成微线程,由语言解释器自身而非操作系统内核管理,上下文切换和任务调度纯粹在解释器内完成

微线程管理在同一个CPU核心上一个程序的不同子任务的执行,Stackless Python不移除Python的全局解释器锁, 也不使用多线程或多进程。

所以它只允许在一个共享CPU核心上的协作式多任务而非并行,最初不能获得而现在有了某种形式的抢占

像大规模多玩家在线游戏Eve Online的实现和IronPort的邮件平台都是在使用Stackless Python

4Pyston

Pyston使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能

具体使用可以参考它的官网 https://blog.pyston.org/

5PeachPy

PeachPy是嵌入 Python 的 x86-64 汇编器。

它自动化了一些细节,并允许使用 Python 生成重复的汇编代码序列。

而且它还有以下这些功能:

  • 元数据文件的自动生成
  • 自动适应不同的调用约定和 ABIs
  • 汇编编程中常规任务的自动化
  • 自动分配寄存器
  • 支持 x86-64 指令,最高可达 AVX-512 和 SHA
  • 基于 Python 的元编程和代码生成
  • 兼容 Python 2 和 Python 3,CPython 和 PyPy

6最后

你知道的越多,你不知道的就越多

对于Python的性能来说,如果要说它慢,那只是没有去寻找提升Python性能的办法

如果非要说Python性能差,先把上面这5高性能Python框架拿用一下,再下定论

这就是今天的分享啦,我是一行,技术永不眠,我们下期见!