python 大项目使用cython_提升6.75倍!利用Cython为Python代码加速
全文共2012字,預計學習時長4分鐘
圖片來源:Unsplash
如果你曾經用Python編寫過代碼,可能會發現等待某些代碼塊執行的時間比預期要長。盡管可以通過一些方法提高其代碼效率,但它的反應速度仍然比C語言慢。這主要歸結于Pyhton是一種動態程序語言,在運行時執行很多任務,而C語言在編譯期間便已經執行。
如果你很享受用Python編寫代碼,但又希望可以提高效率,那么可以考慮一下使用Cython。Cython是一種獨立編程語言,可以很容易地并入類似于Jupyter筆記本之類的工作流之中。在執行過程中,Cython會將Python代碼轉換為C語言,從而大大提高其運行速度。
安裝Cython
使用Cython需要安裝C語言編譯器,因此,安裝過程會根據你當前的操作系統而有所不同。對于Linux操作系統,通常需要安裝GNU C語言編譯器(gncc)。對于Mac操作系統,則需要通過下載Xcode來安裝gncc。對于Windows操作系統,安裝程序會稍微有點復雜。
安裝C語言編譯器之后,下面需要的就是在終端運行。
如何使用Cython
通過Jupyter筆記本演示Cython的功能是最簡單的方法。要在筆記本中使用Python,需要運用IPython的魔術命令。該命令以百分號開始,提供附加功能用以增強工作流。通常,魔術命令分為兩種類型:
1. Line Magic以一個%開頭,且僅能作用于一行代碼。
2. Cell Magic以兩個%開頭,可以作用于多行代碼。
具體流程如下:
首先,為了啟用Cython,需要執行命令
%load_extCython
每當想要在單元格中運行Cython時,需要先在單元格中輸入下面的魔術命令
%%cython
完成上述操作之后,便可以開始編寫Cython代碼了。
圖片來源:pixabay
Cython能有多快?
Cython能比常規Python代碼快多少實際上取決于代碼本身。例如,如果運行成本較高的多變量循環,Cython明顯優于常規的Python代碼。遞歸函數同樣使得Cython快于Python。
用斐波那契數列來演示一下。簡單來說,這一算法通過將前兩個數相加從而找到下一個數。下面是在Python中示范:
def fibonacci(n):
if n < 0:print("1st fibonacci number = 0")
elif n == 1:return 0
elif n == 2:return 1
else:return fibonacci(n-1) + fibonacci(n-2)
讓我們來啟動Python:
可以看到,找到序列中第39個數用了13.3秒。掛鐘時間在這里指的是從函數調用開始到結束所需的總時間。
在Cython中定義相同的函數:
那么發生了什么呢?可以看到,在頂端執行cell magic命令,從而使得Cython可以應用于這個單元格。我將簡要介紹“-a”的作用,接著,使用與之前基本一樣的代碼。唯一的不同之處在于此處可以使用靜態類型聲明,并將n定義為整數。
可以看到,通過在魔術命令后添加“-a”,能夠接收到一些標注,這些標注反映了代碼中有多少Python交互。這一代碼的目的在于去掉所有黃線并加上白色背景,因而此處不存在Python交互,所有代碼都在C語言中執行。你還可以單擊每行旁邊的“+”查看Python代碼的C語言翻譯。
這一代碼能有多快呢?我們一起看看:
在本例中,Cython的速度大約是Python的6.75倍,這清楚地展示了Cython能夠大大節約時間。這一點也是Cython相比于Python最大的改進之處。
附加選項
如果你對C語言已經有所了解,Cython還允許訪問C代碼,而Cython的創建者還沒有為這些代碼添加現成的聲明。那么,使用以下代碼可以為C函數生成Python包裝器并將其添加到模塊dict中。
%%cython
cdef extern from "math.h":cpdef double sin(double x)
Cython證明了并行性等許多額外的功能。
總之,如果你遇到在執行Python代碼時等待時間過長的問題,Cython可以提供一種集成而高效的方法來加速代碼執行速度。更重要的是,如果你熟悉C語言,就可以使用Cython許多進一步優化代碼的功能。
留言 點贊 關注我們一起分享AI學習與發展的干貨歡迎關注全平臺AI垂類自媒體 “讀芯術”
總結
以上是生活随笔為你收集整理的python 大项目使用cython_提升6.75倍!利用Cython为Python代码加速的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php创蓝253四要素认证_PHP下基于
- 下一篇: vim切换编程语言_多语言编程必备的十大