Python具有可扩展的特性,python的可扩展性
Python是高度可扩展的,用C语言或Fortran写扩展有很多种方法。必要时,Python代码可以直接调用这些扩展作为子例程。本节讨论一些用于构建扩展的主要编译器(肯定不是一个完整的列表)。
相关:《Python基础教程》
Cython
Cython(不同于CPython)既指语言,也指编译器。Cython语言是Python语言的超集,增加了C语言语法。Cython可以在一个代码段或一个完整的函数中显式释放GIL。变量和类属性上的C类型声明以及对C函数的调用都使用C语法。代码的其余部分使用Python语法。通过这种混合的Cython代码,Cython编译器可以生成高效的C代码。任何常规优化的C/C编译器都可以编译这种C代码,从而高度优化扩展运行时代码,性能接近原生C代码。
Numba
Numba是一个动态的实时(JIT)和NumPy感知的Python编译器。Numba使用LLVM编译器基础设施来生成优化的机器码和包装器,以便从Python调用代码。与Cython不同,编码使用常规的Python语言。Numba可以从decorator中嵌入的注释中读取类型信息,并优化代码。对于使用NumPy数据结构的程序,如数组和许多数学函数,它可以达到与C或Fortran语言相似的性能。NumPy对线性代数和矩阵函数使用硬件加速,并使用LAPACK和BLAS提供额外的加速,大大提高了性能。关于LU因式分解中的速度比较,见IBM博文C,Julia,Python,Numba和Cython。
除了CPU,Numba还可以使用GP-GPU后端。Anaconda,Inc .是一个主要Python发行版的幕后公司。该公司还开发了Numba和Numba Pro的商业版本。
Fortran to Python Interface Generator
Fortran到Python接口生成器(F2Py)最初是一个独立的包,现在包含在NumPy中。F2Py支持Python调用用Fortran编写的数值例程,就好像它们是另一个Python模块一样。由于Python解释器无法理解Fortran源代码,F2Py将Fortran编译成动态库文件格式的原生代码,这是一个包含函数的共享对象,具有Python模块接口。因此,Python可以直接调用这些函数作为子例程,并以原生Fortran代码的速度和性能执行它们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。