24招加速你的Python,超级实用!

恋习Python

共 964字,需浏览 2分钟

 · 2019-10-08

云哥前期从以下九个方面讨论了加速Python的具体方法,一共24个,每个都带有优化前后的对比,非常实用。

  1. 分析代码运行时间

  2. 加速查找

  3. 加速循环

  4. 加速函数

  5. 实用标准库加速

  6. Numpy向量化加速

  7. 加速Pandas

  8. Dask加速

  9. 多线程多进程加速


我在此基础上主要美化了编辑,方便读者更容易阅读学习。



一 、分析代码运行时间


1 测算代码单次运行时间


平凡法:


0517a1671472efdee1918a0390c8ae3d.webp


快捷法(Jupyter):


6e12c1521961a2aa9cb24463a2eb9303.webp


2 测算代码重复执行多次平均用时


平凡法:


a0819ce21343b32fffe51edb971f1cf9.webp


快捷法(Jupyter):


241485b02d8db9d58fcef8f2e5b43be2.webp


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


平凡法:


56a11affb1a0001e52d5bde0796b845c.webp


快捷法(Jupyter):


b36cddd551f23cf3fe5e62837179d98d.webp


4 按行分析代码运行时间


平凡法:


19999843fbf9c9bac59bd0356681d61b.webp


快捷法(Jupyter):


bfc59e0352caa51e244bf09b62c5423b.webp



二、加速你的查找


5 用set而非list进行in查找


低速法:


af5601b5a780b57216e31805742230aa.webp


高速法:


306dfd7d192dba50d34d6130036148af.webp


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


低速法:


e8151b479239fb7baaf7beb319aaa987.webp


高速法:


ddcc429d06fe0782c32ef5147e742ef4.webp



三、加速你的循环


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


低速法:


34dece763d6fa011b289635f42b26cbd.webp


高速法:


2b52efd07881a2900f7ae0db49bcad90.webp


8 循环体中避免重复运算


低速法:


bd0d4981d5d2a2170eea87b39c381db0.webp


高速法:


8929d5906a75cad4f01b25cd2bef0676.webp



四、加速你的函数


9、用缓存机制加速递归函数


低速法:


d899ac3f142ed06f6c5f3715fd48d0e7.webp


高速法:


c1eebe0665ca524b5a5683e19e8b35eb.webp


10、用循环取代递归


低速法:


d899ac3f142ed06f6c5f3715fd48d0e7.webp


高速法:


745b54e27212ad8806ebfabbf56d276c.webp


11、 使用Numba加速Python函数


低速法:


16846665fcd3a27a1315b2b4ac1cf2f4.webp


高速法:


01b1e79edf1c66f5641807e96490e342.webp



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


12、使用collections.Counter类加速计数


低速法:


dd33c77cbc1c98933265c1530704f7ee.webp


高速法:


717213eb984fc0f2ab30b215ffc4e3c3.webp


13、使用collections.ChainMap加速字典合并


低速法:


9bc885880aa073c0c34640145e37bc40.webp


高速法:


e23c78dcded6b0b7beaee1dacde3b0b7.webp



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


14、使用np.array代替list


低速法:


7905871c872a19e42e255c2282d6616f.webp


高速法:


99c67bd2beb30c29b567f69f6df0b2a7.webp


15、使用np.ufunc代替math.func


低速法:


f26d6bee05b0ad8d249417dd4771a63e.webp


高速法:


190cc0b321d09fe1c249a25b078ed20e.webp


16、使用np.where代替if


低速法:


aaead70bdd818d1652e31ffe448da588.webp


高速法:


a4c50d645f0d6ae14918285eb13f2c34.webp



七、加速你的Pandas


低速法:


e9089dfb255812b58677ec40478a73b1.webp


高速法:


cfc7a6672d9c5751cc079a39c5e16f6d.webp


18、避免动态改变DataFrame的行数


低速法:


9180ce1cd92a0ec6635ba66358b9544d.webp


高速法:


01ad523f131ac654af609231e42385c6.webp


19、使用csv文件读写代替xlsx文件读写


低速法:


299a1c8d3cd5d4c0d6638b2a4cf257ac.webp


高速法:


b6ca95e24f1f03b498e837601d7df4fc.webp


20、使用pandas多进程工具pandarallel


低速法:


b45fbc3cec32c0fba66443733085b0af.webp


高速法:


f245e064a8b5bbd7324a7f3a741474fc.webp



八、使用Dask进行加速


21、使用dask加速dataframe


低速法:


d55fbd45cdf34e2171e0f9084a8e759b.webp


高速法


20a6aceff1197d962a99855538f41844.webp


22、使用dask.delayed应用多进程加速


低速法:


e651ba4fe6b51b38b27fee497d0a8fbb.webp


高速法:


4aebdb75af626c6ba48b2850b3ac8d79.webp



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


23、使用多线程提升IO密集任务效率


低速法:


d7808b49864a8d88f78dad2ddf286be5.webp


高速法:


f45070d17438e91869c802c5cb55c9b9.webp


24、使用多进程提升CPU密集任务效率


低速法:


498761419081a071a790a41eb6b3a817.webp


高速法:



3a345e0525f29516f4a67e94ce071303.webp


浏览 27
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

举报