成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

立竿見影地把你的 Python 代碼提速7倍

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

 [[322806]]

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

 

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

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

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

 

  1. python3 -m pip install cython 

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

 

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

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

 

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

 

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

如下圖所示:

 

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

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

 

  1. 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)容如下:

 

  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項(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)椋琲mport只會(huì)從后綴為.py/.pyc/.pyo/.so的文件中導(dǎo)入模塊,不會(huì)進(jìn)入.pyx文件中尋找。

責(zé)任編輯:華軒 來源: 未聞Code
相關(guān)推薦

2025-03-03 00:10:00

密集型NumPyPandas

2012-03-30 10:03:53

2023-03-24 12:39:55

CIOCEO

2017-04-26 10:08:57

臺(tái)式機(jī)噪靜音教程

2012-03-15 14:47:41

百度

2018-05-09 14:26:44

提速降費(fèi)新方案

2020-03-09 15:00:35

搜狗AI

2019-09-19 10:23:18

編程手機(jī)微信

2024-01-16 07:48:55

百萬訂單系統(tǒng)

2022-07-04 15:44:26

人工智能數(shù)據(jù)中心

2011-11-15 11:03:48

2020-11-27 06:58:24

索引

2023-03-08 07:46:53

面試官優(yōu)化結(jié)構(gòu)體

2013-08-28 12:36:48

金萬維

2018-03-28 14:10:10

GoPython代碼

2021-09-02 18:02:24

騰訊QQ移動(dòng)應(yīng)用

2011-12-13 10:11:49

2010-05-27 22:30:08

桌面虛擬化回報(bào)

2022-08-09 09:10:31

TaichiPython

2018-08-13 20:48:20

混改5G中國(guó)聯(lián)通
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久国产精品无码网站 | 亚洲一区在线观看视频 | 精品国产亚洲一区二区三区大结局 | 色伊人网| 色综合久久天天综合网 | 日韩亚洲视频 | 黄色片免费在线观看 | 日韩精品在线播放 | 韩日在线视频 | 午夜精品一区二区三区免费视频 | 亚洲天堂成人在线视频 | 国产不卡在线观看 | 亚洲激精日韩激精欧美精品 | 激情五月综合网 | 国产中的精品av涩差av | 国产欧美精品一区 | 巨大荫蒂视频欧美另类大 | 国产日韩欧美电影 | 成人区精品 | 香蕉超碰 | h在线免费观看 | 56pao在线| 日韩欧美三级电影 | 亚洲欧美中文字幕在线观看 | 成人免费网站www网站高清 | 国产成人精品免费视频 | 日日夜夜草 | 欧美精品一区二区三区在线 | 一区二区视频在线 | 欧美精品1区 | 日韩成人在线免费视频 | 97精品国产97久久久久久免费 | 男女深夜网站 | 亚洲一区二区三区四区五区午夜 | 一区二区在线免费观看 | 欧美成人二区 | 美国a级毛片免费视频 | 欧美日韩视频 | 激情小说综合网 | 91人人看 | 日韩一区二区在线播放 |