前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[技巧篇] 循环代码优化技巧。

[技巧篇] 循环代码优化技巧。

作者头像
编程文青李狗蛋
发布2019-07-24 17:12:04
8220
发布2019-07-24 17:12:04
举报

00.写在之前

「代码优化」应该是我们时刻记在心里的一件事情,从一开始就建立一种正确的编程观念,养成一种好的编程习惯,避免一些低效弱智的做法。

虽然现在计算机越来越快,内存越来越大,很多人会觉得一顿操作猛如虎之后可能才优化了 1 s,实在太微不足道了,但是可别忘了,你以后编的程序可不是给你一个人用的,可能是服务器程序,你这个慢 1 s,一天来个百万次千万次的请求,那对于你的运行效率来说,那是拖慢了成千上万倍。

尤其是在「循环」上,我们更要注意,因为很多时候问题就是出现在循环上。关于如何在循环上考虑优化代码,就是下面我要介绍的内容。

01.循环代码优化

技巧 1:减少循环内部不必要的计算

什么算是不必要的计算,就是指那些无论放在循环里面还是放在循环外面都不会改变程序运行结果,对于这样的能放到循环外面的一定要放到循环外面。

技巧 2:嵌套循环中,尽量减少内层循环的计算

对于循环来说,越往里面计算的频率越高,我们都知道在循环中时间复杂度的计算是乘法的关系,所以也是能往外放的尽量往外放。

这里我们来看一个例子,假设我有一段下面这样的代码:

代码语言:javascript
复制
import time

start = time.time()
for i in range(1000):
     res = []
     for j in range(10000):
         res.append(i * 1000 + j * 100)
end = time.time()
print('befor 耗时 {}'.format(end - start))

运行一下,输入的时间差为:

代码语言:javascript
复制
befor 耗时 2.323680877685547

但是我们仔细看一下上述的代码,根据技巧 2 中所说,可以发现对于 i * 1000 来说,完全可以先在外面计算好了,直接把结果拿进来用就可以,那么我们稍微修改一下:

代码语言:javascript
复制
import time

start1 = time.time()
    for i in range(1000):
     res = []
     n = i * 1000
     for j in range(10000):
         res.append(n + j * 100)
end1 = time.time()
print('after 耗时 {}'.format(end1 - start1))

同样运行代码,输出的结果如下所示:

代码语言:javascript
复制
after 耗时 1.914416790008545

相比较可以发现,同样一个结果的代码,只是一个简单的变化,代码的效率就提高了 20%。所以在循环里,一定要细扣哪些是可以丢在外面的。

技巧 3:尽量使用局部变量

尽量使用局部变量来代替全局变量,因为局部变量查询比较快,有助于效率的提升。

技巧 4:使用 join() 连接字符串

这个技巧呢不仅适用在循环里,可以说在程序的任意地方都适用。

用 join() 来代替 ‘+’ 去连接字符串,因为 ‘+’ 拼接会产生新的字符串对象,如果你循环 10000次,那就会产生 10000 个对象,而 join 就不会,它只会产生 1 个对象,用这 1 个对象去重复计算。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档