对于Python编程,大家想必都或多或少的掌握了不少知识点,但是python为人所诟病的一大缺点是其运行速度比较慢。
其中一大主要的原因是Python是动态的,解释性的语言,而非静态的语言。而这就意味着Python解释器在执行程序时,并不知道变量的具体类型。
例如C++程序中,int a = 0;那么在程序的运行过程中,C++解释器始终知道变量a是一个int类型,而在Python中,编程语言变为a = 0。则Python解释器必须检查每个变量的PyObject_HEAD属性才能确定变量类型,例如:
所以对于Python编程的每一步都会有更多的步骤进行支撑,因此Python的程序执行都比较慢。那么,我们该如何提升我们的Python运行速度呢,今天小编就为大家介绍一下加速Python程序的几大方法。
在后面的程序效率对比上,我们以下面的python程序作为基础对比程序。
01.优化编写的代码
对于Python程序,大家可以首先将程序的目的实现,然后在这个基础之上,分析程序执行效率低下的部分并实现优化,然后不断的执行这个分析效率-优化的步骤。对于效率低下的操作,可以采用Python的内置高阶函数等方式进行加速,如下图所示:
上图程序中,我们分别使用for循环函数和Python内置高阶map函数实现了列表中元素的平方,结果显示,使用map函数,速度是原先的1.12倍。
02.Cython
Cython的语法同Python的语法类似,cython通过编写可以被python调用的C扩展,是其既具备了Python的语法特点,同时又有了像C语言一样的程序运行速度,此外,Cython还可以方便的调用C的包。下图给出的程序,展示的是利用cython进行开发时在运行速度上相较于Python的提升。
上图可以看出,通过cython,虽然程序上没有区别,但是在运行速度上cython提升了1.5倍左右。
03.使用多线程
在进程执行当中,可以有多个线程同时进行执行,但是每个线程可以执行不同的任务,对于多线程,这里不做过多的解释,我们直接用一个简单的程序来展示多线程。
上述的程序中,我们使用多线程来实现我们的Pow_2函数,可以看到多线程同样起到了加速Python程序执行,这里还需注意一点是我们使用多线程往一个公共的pow_list中添加数据,由于这是我们期望的,所以不需要添加线程锁来进行保护。
04.使用numba库
对于numba,官网对它本身的定义为“python的解释器”。对于numba库的详尽解释,这里小编给大家一个纽约大学的网站,大家可以通过这个网站的讲解,对numba有更加全面的了解(https://nyu-cds.github.io/python-numba/)
对于numba库的简单方法,最简单的是在函数定义的前面加上@jit装饰器。
上述程序中,我们在Pow_2函数前加上了jit装饰器,运行结果显示,其运行速度是基础方法的2.34倍左右,大大的缩短了程序的执行时间。
05.使用多进程
对于Python的多进程,Python内置了多进程包multiprocessing,我们只需要定义一个函数,便可以借助multiprocessing包,轻松的实现从单进程到并发执行的转换。
上述程序中,我们创建了4个进程,并实现了将数组元素进行平方的功能,从结果可以看出,多进程实现了真正的并行,使得程序的运行时间大大缩短,运行速度达到了基础程序的3.05倍。
06.尽可能使用numpy、pandas等科学计算库
使用科学计算库不仅可以帮助我们简化代码,提升代码可读性,而且其高效的数据处理效率可以大大提升我们的程序执行速度。
上图中,我们使用numpy来完成相同的效果,即对列表中的每个元素都实行平方。这里我们先将原始的列表origin_list转化numpy的数组,然后直接对数组进行平方。
注意这样的操作对于列表对象来说是不合法的。从上面的程序来看,使用numpy既大大简化了程序,而且也大大的提升了程序的执行效率,提高了65倍啊!对于数据处理来说,是非常友好的。
上述的几个Python运行效率提升的方法中,既有从程序本身入手进行提升,也有利用进程、线程技术和python+C的方法进行实现。大家可以在以后的程序编写中,在需要提升运行效率的时候,参考这几种方式,提升自己python程序的运行效率。
<pre data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-original-color="rgb(62, 62, 62)" data-style="letter-spacing: 0.544px; font-weight: 700; text-align: -webkit-center; background-color: rgb(255, 255, 255); font-size: 16px; color: rgb(62, 62, 62); widows: 1; word-spacing: 2px;" class="js_darkmode__26" style="color: rgb(62, 62, 62);font-size: 16px;letter-spacing: 0.544px;font-weight: 700;widows: 1;caret-color: rgb(51, 51, 51);text-align: center;word-spacing: 2px;"><p style="text-align: left;"><strong style="color: rgb(2, 30, 170);font-size: 15px;letter-spacing: 0.544px;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;white-space: pre-wrap;">近期八大热门:</strong><br /></p><section style="padding-right: 15px;padding-left: 15px;font-size: 15px;letter-spacing: 1px;line-height: 2;"><section data-mpa-template="t" mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)" data-style="color: rgb(62, 62, 62); font-size: 15px; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); font-family: monospace; text-align: left; widows: 1; word-spacing: 2px; caret-color: rgb(255, 0, 0); white-space: pre-wrap;" class="js_darkmode__90" style="letter-spacing: 0.544px;text-align: start;caret-color: rgb(255, 0, 0);white-space: pre-wrap;"><section mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" class="js_darkmode__91" style="letter-spacing: 0.544px;font-size: 16px;color: rgb(63, 63, 63);word-spacing: 1px;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" class="js_darkmode__92" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" class="js_darkmode__91" style="letter-spacing: 0.544px;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" class="js_darkmode__92" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)"><section powered-by="xiumi.us" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="margin-right: 0em;margin-left: 0em;"><pre data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-original-color="rgb(62, 62, 62)" data-style="letter-spacing: 0.544px; font-weight: 700; text-align: -webkit-center; background-color: rgb(255, 255, 255); font-size: 16px; color: rgb(62, 62, 62); widows: 1; word-spacing: 2px;" class="js_darkmode__26" style="letter-spacing: 0.544px;caret-color: rgb(51, 51, 51);color: rgb(62, 62, 62);text-align: center;word-spacing: 2px;"><section style="font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(145, 53, 24);letter-spacing: 0.38px;"><pre style="letter-spacing: 0.544px;color: rgb(62, 62, 62);text-align: left;"><ul class="list-paddingleft-2" style="width: 577.422px;"><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!<br /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密<br /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;color: rgb(0, 0, 0);">用Python一键生成炫酷九宫格图片,火了朋友圈<br /></span></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记<br /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">Github获8300星!用Python开发的一个命令行的网易云音乐<br /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;color: rgb(0, 0, 0);">一道Python面试题,硬是没憋出来,最后憋出一身汗!</span></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;color: rgb(0, 0, 0);">卧槽!Pdf转Word用Python轻松搞定!</span></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;color: rgb(0, 0, 0);">教你6招,不错的Python代码技巧!</span></section></li></ul>
<section style="line-height: 1.8em;orphans: 4;font-size: 15px;letter-spacing: 0.1em;white-space: pre-wrap;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;margin: 2em 5px !important;"><span style="color: rgb(0, 122, 170);"><strong>程序员GitHub</strong></span>,现已正式上线!</section><section style="line-height: 1.8em;orphans: 4;font-size: 15px;letter-spacing: 0.1em;white-space: pre-wrap;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;margin: 2em 5px !important;"><span style="letter-spacing: 0.1em;">接下来我们将会在该上,为大家</span><span style="letter-spacing: 0.1em;color: rgb(0, 122, 170);"><strong>分享<strong>GitHub</strong>上优质的开源神器,程序员圈的趣事</strong></span><span style="letter-spacing: 0.1em;">,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!</span></section>
点这里,领取新手福利
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python文件读写——理论知识09/25
- ♥ 教你使用Python PIL模块随机生成中文验证码10/26
- ♥ 如何用python脚本测试手机10/28
- ♥ 基于LBPH的python人脸识别操作11/25
- ♥ python魔术方法有什么用10/18
- ♥ Pandas 创建 Series 的方法有哪些?12/11
内容反馈