24 式加速你的 Python

FightingCoder

共 1241字,需浏览 3分钟

 · 2019-07-30

这里分享给大家一篇文章,文章里面列举了一些方法来将我们的 Python 代码提速,大家试试看。

转载来源

公众号:Python 与算法之美

阅读本文大概需要 3 分钟。


一,分析代码运行时间

第 1 式,测算代码运行时间

平凡方法

bd14f5d5e44481a76833436759768262.webp

快捷方法(jupyter 环境)

2b51568815b03df5fa641fc29cec5152.webp

第 2 式,测算代码多次运行平均时间

平凡方法

93d8a8639e8ccf7e103e7791c442fd5d.webp

快捷方法(jupyter 环境)

6bb48d33d309ba4a13c1086c12f28345.webp

第 3 式,按调用函数分析代码运行时间

平凡方法

8604dc3ab8ba6d6ac21f7d991c122d48.webp

6abfa14b64220f09360434248ea275b3.webp

快捷方法(jupyter 环境)

f97ef0514cd71743fdfab3829dcf57e5.webp

第 4 式,按行分析代码运行时间

平凡方法

cc343cbe3443f379f4fc39768f091f0e.webp

fd2649cc7b46f6c2f37e032fe6d2967b.webp

11d5e9eb06cbe9510e6bc0d2ce711232.webp

08c694627e05555f5454901fbf0e1e7b.webp

快捷方法(jupyter 环境)

6b49e2dd93aefe6b03f6d0b2f07624f6.webp


二,加速你的查找

第 5 式,用 set 而非 list 进行查找

低速方法

90a7ad4b9c6fcf9d9c29bb2369289a07.webp

b5111122114ac967736021d21ef74669.webp

高速方法

9ffd9252c5072c2af7f78f737454d4ce.webp

第 6 式,用 dict 而非两个 list 进行匹配查找

低速方法

2ca6cce678549f86a972e47a229f83a8.webp

1c237907d8cfbec0c9259bc6b81bf379.webp

高速方法

63a5be2915752e3081536ab4936fbe11.webp


三,加速你的循环

第 7 式,优先使用 for 循环而不是 while 循环

低速方法

e65d75494671fda76de384b1052660ca.webp

高速方法

2bff62911f659997157506933162ea64.webp

第 8 式,在循环体中避免重复计算

低速方法

2b91c77f0f5acab8179061652e9b0e96.webp

高速方法

44e7790c5201237f6d37997f8f3a308e.webp


四,加速你的函数

第 9 式,用循环机制代替递归函数

低速方法

328beedde5ad481c0982339ead1c9362.webp

高速方法

b12e758e9960722dab542e3b90ea5a7d.webp

第 10 式,用缓存机制加速递归函数

低速方法

b92f9c4ba73c6c4b9d78b105f436065e.webp

高速方法

2b6d5f941bb9ef369c0edcf0a414f899.webp

第 11 式,用 numba 加速 Python 函数

低速方法

4808fb09189bf450a66219cbb3bb1b69.webp

高速方法

766f912049528613c66e724f29e6d6df.webp


五,使用标准库函数进行加速

第 12 式,使用 collections.Counter 加速计数

低速方法

b871d50f44442c5e42c595822ddb4b6f.webp

高速方法

33807ecd3778695b2e81ba4022041c59.webp

第 13 式,使用 collections.ChainMap 加速字典合并

低速方法

a91b1c2fe22bc5eb3cbc21166b19464a.webp

3e0ba53eded380a28e8b5e2e29626e23.webp

高速方法

9475433c6dcb44fc521dcdea7df345ce.webp


六,使用 numpy 向量化进行加速

第 14 式,使用 np.array 代替 list

低速方法

6f1fc798b8e325105bd16a0bb20dfe44.webp

高速方法

d1579f8530714f5f99624f7313b4acac.webp

第 15 式,使用 np.ufunc 代替 math.func

低速方法

12aefae91d62b4b28e928c14fca462d2.webp

高速方法

95a97fbe5478e3fa348742e666cdaf63.webp

第 16 式,使用 np.where 代替 if

低速方法

b6eb63b7e0f7629400d555c4a4c81c88.webp

b027ecc8cc535b5cb73529fc2b4b7c5f.webp

高速方法

a52a0dd94abae382f171e17662b7278d.webp


七,加速你的 Pandas

第 17 式,使用 np.ufunc 函数代替 applymap

低速方法

0da9e155985d4e2af7a735841d50a240.webp

高速方法

5dc118a8e98e2e6bfcdeb799eca7f51a.webp

第 18 式,使用预分配存储代替动态扩容

低速方法

8c9b119601668281209c63b582b0ff95.webp

高速方法

01f8c21a57604282391fcdd4075404f2.webp

第 19 式,使用 csv 文件读写代替 excel 文件读写

低速方法

e3cd828406a865ad03e992c66b455017.webp

高速方法

92d6d6c24860dc15b93c1bde30c31ae0.webp

第 20 式,使用 pandas 多进程工具 pandarallel

低速方法

577d13d0a216cc993b51f8881e8a41e2.webp

3f99d2f718cf49779be1e8954293331b.webp

高速方法

1ad5245dca3e4a261d7b01125d8ab16f.webp


八,使用 Dask 进行加速

第 21 式,使用 dask 加速 dataframe

低速方法

28839cefc826b885274c87c1830c54d2.webp

高速方法

72a086c4282f47c6e9f56bcf34e61666.webp

第 22 式,使用 dask.delayed 进行加速

低速方法

fd19e262dfab44f82bcc8a4921b41610.webp

34944513cb7997365fda8a8c131965ef.webp

高速方法

666490598aac84e34b9004e1142776f0.webp


九,应用多线程多进程加速

第 23 式,应用多线程加速 IO 密集型任务

低速方法

a8e559e9346b0ac9cb2f04ae92ea9aa0.webp

高速方法

fa0968205f8633dcc736de4f25052d62.webp

第 24 式,应用多进程加速 CPU 密集型任务

低速方法

4e099d0eac15156bdfc61e089f858745.webp

高速方法

6345f814a06abc82f7dd30105be6c4c5.webp


推荐阅读

1

跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

2

跟繁琐的模型说拜拜!深度学习脚手架 ModelZoo 来袭!

3

只会用Selenium爬网页?Appium爬App了解一下

4

妈妈再也不用担心爬虫被封号了!手把手教你搭建Cookies池

崔庆才

静觅博客博主,《Python3网络爬虫开发实战》作者

隐形字

个人公众号:进击的Coder

247552b9fffccb5072d7e14283770383.webpf4bfe4f3f7e43e5f6d1f96121a7b4256.webp

长按识别二维码关注


好文和朋友一起看~
浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报