久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

一日一技:立竿見影地把你的 Python 代碼提速7倍

 西北望msm66g9f 2020-04-16

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

要提高運(yùn)算速度,,根本辦法當(dāng)然是改進(jìn)算法。不過算法的提高是一個(gè)長期積累加上靈機(jī)一動(dòng)的過程,。我們今天要講的,,是一個(gè)不費(fèi)腦筋,立竿見影的方法——把 Python 代碼編譯成 C 語言代碼,。通過 C 語言的運(yùn)行效率來加速計(jì)算過程,。

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

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

python3 -m pip install cython

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

def fib(n):
    if n in [12]:
        return 1
    return fib(n - 1) + fib(n - 2)

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

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

from setuptools import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize('fast_fib.pyx'))

如下圖所示:

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

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

python3 setup.py build_ext --inplace

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

還有一個(gè)文件叫做fast_fib.c。不過你不用打開這個(gè)文件,,因?yàn)樗?200多行,。并且你甚至可以直接把它刪掉。真正有用的只有這個(gè)fast_fib.cpython-38m-darwin.so文件,。

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

import time
from fast_fib import fib

start = time.time()
result = fib(40)
end = time.time()
print(f'斐波拉契數(shù)列第40項(xiàng)為:{result},,耗時(shí):{end - start}秒')

運(yùn)行效果如下圖所示:

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

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

關(guān)于 Cython 的更多介紹,請(qǐng)閱讀它的官方文檔[1]

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

這是因?yàn)椋?code>import只會(huì)從后綴為.py/.pyc/.pyo/.so的文件中導(dǎo)入模塊,,不會(huì)進(jìn)入.pyx文件中尋找。

參考資料

[1]

官方文檔: https://cython./

END

掃描二維碼

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多