大家好,我是一行
最近看到知乎有这么一个问题,有哪些Python库让你相见恨晚?
作为Python老司机来说,这样的库不要太多了,从地图绘制到算法优化、从调试工具到代码分析,python的生态里有大量的库资源可以给Pythoner使用
但是对于不太了解的python人们,总会评价说python解释性语言运行速度慢吧啦吧啦的
所以一行这里分享几个高性能Python库/框架,下次再遇到这种评价,直接就把这些库/框架怼到他脸上
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中使用。
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的作用
Stackless Python或称简称Stackless,是一个Python编程语言解释器,这么称呼的原因是它避免了依赖C调用栈为自己的堆栈。
Stackless Python的最突出特征是微线程,就是说一个运行的程序被分解成微线程,由语言解释器自身而非操作系统内核管理,上下文切换和任务调度纯粹在解释器内完成
微线程管理在同一个CPU核心上一个程序的不同子任务的执行,Stackless Python不移除Python的全局解释器锁, 也不使用多线程或多进程。
所以它只允许在一个共享CPU核心上的协作式多任务而非并行,最初不能获得而现在有了某种形式的抢占
像大规模多玩家在线游戏Eve Online的实现和IronPort的邮件平台都是在使用Stackless Python
Pyston使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能
具体使用可以参考它的官网 https://blog.pyston.org/
PeachPy是嵌入 Python 的 x86-64 汇编器。
它自动化了一些细节,并允许使用 Python 生成重复的汇编代码序列。
元数据文件的自动生成
自动适应不同的调用约定和 ABIs
汇编编程中常规任务的自动化
自动分配寄存器
支持 x86-64 指令,最高可达 AVX-512 和 SHA
基于 Python 的元编程和代码生成
兼容 Python 2 和 Python 3,CPython 和 PyPy
你知道的越多,你不知道的就越多
对于Python的性能来说,如果要说它慢,那只是没有去寻找提升Python性能的办法
如果非要说Python性能差,先把上面这5高性能Python框架拿用一下,再下定论
这就是今天的分享啦,我是一行,技术永不眠,我们下期见!
授人以渔
一行当初为了学习技术买了太多的课程和书籍,但后来发现在这些资料不在多而在精
天下武功,为快不破,学习技术最高效的方式就是通过学习经典的书籍了
一行这里把自己学习技术路上的经典书籍全部整理出来,并通过网上的开源项目全部打包在一起分享给看到的知友,希望能够给你的技术能力加加速