python相对于C++等编程语言在速度上稍逊一筹,但也不是不可避免,原文作者提供了8个优化思路,我觉得对于我进行GUI编程有着一定的好处,但为了避免链接失效,现对其总结。
首先对于优化的原则主要是三个点:
1.不要过早的优化代码,首先你要保证你的代码能够正确运行,然后在去想着提升速度,对于很多像我一样的小白有时候程序都运行不起来,就不要把注意力放在优化上;
2.权衡优化的代价,有时候优化是要付出一定的代价的,这里我没想明白可能是经历的比较少;
3.不要优化无关紧要的部分,并非所有不好的都要一口气优化了,首先优化问题大的,你能解决的,这样可以提升一定的效率。
技巧1.不要使用全局变量,这个很好理解,新手很喜欢用全局变量,学会慢慢去改正
技巧2.避免
在避免这一部分主要分为避免模块和函数属性访问和避免使用属性变量。
2.1 避免模块和函数属性访问
# 不推荐写法。代码耗时:14.5秒
import math #一次优化
def computeSqrt(size: int):
result = []
for i in range(size):
result.append(math.sqrt(i)) 注意这里的math.sqrt()
return result
def main():
size = 10000
for _ in range(size):
result = computeSqrt(size)
main()
大佬在这里提到了,每次使用’ . '(属性访问符)都会触发特定的方法,如__gettatteribute__()等,这些方法都会进行相关的字典操作,因此会带来额外的时间操作,这里可以改成
from math import sqrt
来消除属性访问(提升了3.6s)
二次优化:对于频繁访问的变量sqrt,将其改成局部变量可以加速运行,例如还是用
import math
可以在computeSqrt函数里面将math.sqrt定义为一个局部变量
同时也可以把rusult.append也定义为一个变量
优化了4.6s
2.2 避免类内属性访问
有时候我们在定义一个类时,需要定义一些类局部变量,使其可以在一个类里面共用,而类局部变量的加载速度时慢于局部变量的,如果频繁的访问类局部变量可以将其定义为一个局部变量。
3.避免一些不必要的抽象
这里主要到了装饰器,因为我还不太了解装饰器,所以不做过多说明。
4. 避免数据复制
主要提到了关键点:不要进行无用的操作,确保代码执行的是你需要的还有一个就是在字符串拼接时多使用join而不要使用+号
5.利用if条件的短路特性
所谓利用if的短路特性主要提到了,if作为判断,我们一般用or或者and来连接多个条件,这时候对于or他是这样的,比如说if a or b ,他是现判断a 只要a满足就执行if里面的语句的,而and呢,首先明确and是多个条件都要满足才会执行if内部语句,所以你这样想对于or,如果你把可能性大的放在前面他是不是就不用执行后面的判断直接进入语句呢?对于and,如果你把错误可能性大的放在前面,一旦第一个即错了,他是不是就可以不用判断后面的呢?这样就把时间省出来了。
6. 循环优化
对于循环优化:大佬主要提到了三点:第一点用for 不用while,第二点用隐形循环不用显性循环,第三点减少循环套循环的计算。
7.使用numba.jit
8.选择合适的数据结构
第七和第八我还不太了解,后期在慢慢看,我觉得可以重点关注2,4,5,6这四点。