日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
立竿見影地把你的Python代碼提速7倍

在我們以前的文章中,曾經(jīng)講過計算斐波那契數(shù)列的幾種方法,其中基于遞歸的方法是速度最慢的,例如計算第40項的值,需要36秒。如下圖所示:

要提高運算速度,根本辦法當然是改進算法。不過算法的提高是一個長期積累加上靈機一動的過程。我們今天要講的,是一個不費腦筋,立竿見影的方法——把 Python 代碼編譯成 C 語言代碼。通過 C 語言的運行效率來加速計算過程。

這個過程看起來很復雜,但實際上你并不需要編寫一行 C 語言代碼。你需要做的只是使用一個叫做 Cython 的庫把 Python 代碼編譯為 C 語言代碼即可。

首先我們來安裝 Cython,就像安裝普通的第三方庫一樣:

 
 
 
 
  1. python3 -m pip install cython 

安裝完成以后,我們單獨寫計算斐波那契數(shù)列的函數(shù):

 
 
 
 
  1. def fib(n): 
  2.     if n in [1, 2]: 
  3.         return 1 
  4.     return fib(n - 1) + fib(n - 2) 

非常簡單的遞歸寫法。然后關鍵來了,我們要把這個文件保存為fast_fib.pyx。注意后綴是.pyx。如下圖所示:

然后我們創(chuàng)建一個setup.py文件,文件內(nèi)容如下:

 
 
 
 
  1. from setuptools import setup 
  2. from Cython.Build import cythonize 
  3.  
  4. setup(ext_modules=cythonize('fast_fib.pyx')) 

如下圖所示:

這個文件的作用,就是調(diào)用 Cython 的cythonize函數(shù)把 Python 代碼轉(zhuǎn)換為 C 代碼。

接下來,開始編譯代碼,執(zhí)行如下命令:

 
 
 
 
  1. python3 setup.py build_ext --inplace 

我的 Python 是 Python3.7,所以運行完成以后,會生成一個fast_fib.cpython-37m-darwin.so,如果你的 Python 是3.8,這個文件名可能是fast_fib.cpython-38m-darwin.so。這個文件你可以改名字,例如改成fast_fib.so。

還有一個文件叫做fast_fib.c。不過你不用打開這個文件,因為它有3200多行。并且你甚至可以直接把它刪掉。真正有用的只有這個fast_fib.cpython-38m-darwin.so文件。

你需要做的,僅僅是直接調(diào)用你的函數(shù)。我們另外創(chuàng)建一個文件test_fast_fib.py,內(nèi)容如下:

 
 
 
 
  1. import time 
  2. from fast_fib import fib 
  3.  
  4. start = time.time() 
  5. result = fib(40) 
  6. end = time.time() 
  7. print(f'斐波拉契數(shù)列第40項為:{result},耗時:{end - start}秒') 

運行效果如下圖所示:

計算斐波那契數(shù)列第40項只需要5秒鐘,速度妥妥變成 Python 版本的7倍。

使用 Cython,不僅可以提高程序的運行速度,還可以把你的核心代碼轉(zhuǎn)換為.so文件,防止別人反編譯看到你的代碼。

關于 Cython 的更多介紹,請閱讀它的官方文檔[1]

有同學可能會問,當前文件夾下面既然有fast_fib.pyx文件,為什么當我們執(zhí)行from fast_fib import fib的時候,不會從這個文件里面導入 Python 版本的代碼?

這是因為,import只會從后綴為.py/.pyc/.pyo/.so的文件中導入模塊,不會進入.pyx文件中尋找。


標題名稱:立竿見影地把你的Python代碼提速7倍
文章來源:http://m.5511xx.com/article/djichcc.html