提速30倍!这个加速包让Python代码飞起来

本文介绍了Cython,一种可以将Python代码转换为C语言以提高运行速度的工具。Cython允许开发者在Python代码中指定变量类型,从而实现与C语言的兼容。通过使用Cython,开发者可以在保持Python易读性的同时,显著提升纯Python代码的执行效率,尤其是在处理大量循环和数据处理任务时。
摘要由CSDN通过智能技术生成

大数据文摘出品

编译:啤酒泡泡、宁静


Python是社区里最受喜爱的编程语言!它是目前为止最易使用的语言,因为它的代码短小精悍,符合人们的思维方式,也符合人们的阅读习惯。


但是你会经常听到有人吐槽Python,尤其是有些C语言的大牛吐槽Python速度慢。


他们说得没错,相比其他高级程序设计语言,如C语言来说,Python确实速度很慢,这主要是因为C语言更面向计算机底层,像一些单片机、电路板的设计都使用C语言,C语言和汇编语言之间的转换也更快,但是“every coin has two sides”,没有完美无缺的编程语言,C语言也有着其诸如代码量大、面向过程的一些缺点,如何让Python兼顾C语言速度方面的优点呢?


一个很形象的例子,就像上图展示的一样,赛车手需要兼顾汽车的发动引擎的内耗磨损,也要兼顾赛车的运行速度,那么,如何在两者之间取得平衡呢?


其实有很多可以提高运行速度的办法,比如:

  • 利用多进程库来使用所有的CPU内核;

  • 如果你正在使用NumPy,Pandas,或是Scikit-Learn库,那么可以使用Rapids来提高GPU的处理速度。


但是这只针对你的任务可以并行的情况,例如数据预处理、矩阵操作等,上述办法都很棒,可是如果你只使用纯Python语言,那该怎么办呢?再比如,你必须使用一个很大的for循环,而且因为数据必须被顺序处理导致你无法使用矩阵,在这种情况下,有没有办法提高Python本身的速度呢?


Cython就是用来加速纯Python代码的。


什么是Cython?


从本质上讲,Cython是Python和C/C++的桥梁。它允许你对Python代码稍作修改,然后把Python代码直接翻译成C语言代码。


你唯一需要修改Python代码的地方就是在每一个变量前面加上它的类型,通常,我们在Python里会这样声明变量:



x = 0.5


如果使用Cython,我们会给变量加上它的类型:



cdef float x = 0.5


这会告诉Cython,我们的变量是浮点型变量,这和我们在C语言中的操作一样。使用纯Python语言,变量的数据类型在赋值后被自动定义。Cython这种显式的变量声明方法使得Python代码转换成C代码成为可能,因为C语言要求变量的数据类型必须在声明变量时写出来。


使用pip安装Cython只需一行代码:



pip install cython


Cython的数据类型


使用Cython时,Cython提供两类类型,一类用于变量,一类用于函数。


对于变量,我们可以这样写(请注意,这些类型都来自C/C++):

  • cdef int a, b, c
  • cdef char *s
  • cdef float x = 0.5 (single precision)
  • cdef double x = 63.4 (double precision)
  • cdef list names
  • cdef dict goals_for_each_play
  • cdef object card_deck


对于函数,我们可以这样写:
  • def – 普通的Python函数,只用Python解释器
  • cdef – Cython专用函数,不能通过纯Python代码使用该函数,必须在Cython内使用
  • cpdef – C语言和Python共用。 可以通过C语言或者Python代码使用该函数


有了对Cython的了解,我们可以更进一步,开始加速我们的代码了!


使用Cython提高代码的运行速度


首先,我们建立一个Python代码的基准——使用一个for循环来计算某个数的阶乘。 以下是用纯Python语言写的代码:


def test(x):    y = 1    for i in range(1, x+1):        y *= i    return y

使用Cython写出的函数和纯Python代码写出的函数很类似,首先,我们要确保Cython代码文件的扩展名是.pyx。 然后,我们唯一修改的地方就是在我们已声明的每个变量和函数前加上它们的类型,run_cython.pyx代码如下:


cpdef 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值