学会这6招,让你的Python 嗖嗖嗖的快!

公众号关注 “菜鸟学Python”

设为 “星标”,带你挖掘更多Python干货!

对于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程序的运行效率。

近期八大热门:

发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!
盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密
用Python一键生成炫酷九宫格图片,火了朋友圈
菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
Github获8300星!用Python开发的一个命令行的网易云音乐
一道Python面试题,硬是没憋出来,最后憋出一身汗!卧槽!Pdf转Word用Python轻松搞定!教你6招,不错的Python代码技巧!
程序员GitHub,现已正式上线!
接下来我们将会在该公众号上,为大家分享GitHub上优质的开源神器,程序员圈的趣事,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

点这里,领取新手福利 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值