社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

90% 的人说 Python 程序慢,5 大神招让你的代码像赛车一样跑起来

进击的Coder • 5 年前 • 341 次点击  

转载来源

公众号:菜鸟学 Python

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


很多人抱怨说自己写的 Python 代码跑的慢,尤其是当处理的数据集比较大的时候,其实稍微改动几行代码就可以让你的代码性能提高好几倍,不信一起来看下面这个 5 个小技巧。

1. for 循环

我们大部分的时候代码里面都有 for 循环,然后里面嵌套一段逻辑处理,下面有两种方法来完成:

二者的性能差距有多大呢,一般我们用内置的 timeit 模块来量化比较:

把传统的 for 改成推导列表,高下立判,性能提高了很多,提升了200%

2. 用 set 而不用 list

我们再来看一个常见的场景,搜索性能的时候用 set 是列表 10 倍,不信看下面这个例子

原因搜索成员的时候,Python 的 set 比 list 快很多。差距就在 if i in mylist 和 if i in myset。列表的复杂度是 O(n),而集和的复杂度是 O(1),搜索起来肯定是 set 快!

3. 交换 if 和 for 的位置

很多时候,我们是在 for 循环内部进行条件判断,循环一个变量,然后用 if/else 进行判断。对于这样的情况,可以优化一下,把 if/else 提到 for 循环外边,也可以提高性能。

4. 巧妙的用 try/except 语句

很多时候在一个 for 循环内部,对i进行计算,然后添加到一个 list 里面,如果能巧妙地利用 try/except,可以摆脱对 if/else 检查的开销,从而提高性能。

5. 神器 collection 模块

collection 库提供了很多模块,这些模块非常有用,有一些模块是跟容器有关,大部分的实战项目我们都会用到。比如 deque 双向队列和 defaultdict 缺省字典。

1). 双向队列 deque

deque 是双向队列,如果你的业务逻辑里面需要大量的从队列的头或者尾部删除,添加,用 deque 的性能会大幅提高!如果只是小队列,并且对元素需要随机访问操作,那么 list 会快一些。

2). 缺省字典 defaultdict

对于字典的使用,我们要学会用 defaultdict 来代替,一来是因为有缺省值非常安全,如果访问不存在的 key,不会报错;二来是 Pyhon 性能会大幅提高。

仅仅换了字典数据结构,性能就大幅的提高了 3 倍。

Python 里面的技巧还是很多的,尤其是性能优化这块,Py3 已经比 Py2 性能上高了许多,如果我们在平时写代码的时候,能多一份思考,代码不仅能 work 还能提升性能,相信你经常这样思考,慢慢的就会成为高手啦!当然很多新手经常不得法,可以看看这个捷径


推荐阅读

1

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

2

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

3

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

4

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


崔庆才

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

隐形字

个人公众号:进击的Coder

长按识别二维码关注

这里“阅读原文”,查看更多

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30201
 
341 次点击