提高Python程序执行性能的7个习惯
人生苦短,我用Python”,这句话很精髓地体现了Python这门编程语言的特点,就是开发高效。Python的语法表现力很强、很灵活,同时拥有大量优秀的第三方库。
python
不过任何事物都不可能是完美的,很多人诟病Python的执行性能低,没有C、Java等语句强。
其实关于这个问题,我个人认为大可不必过于纠结,没有完美的工具,只有适合的场景。所以,选择一门语句时,要看是用于什么地方。大多数情况下,Python还是非常适合的。
但不同的编码习惯,还是会影响Python的执行效率的,CPU的执行和内存的占用。总结了7个日常的习惯,可以提高Python程序执行性能。
1使用局部变量
尽量使用局部变量替代全局变量,这样利于提升性能和节约内存。
例如:
ls=os.linesep
原因:
搜索本地变量速度更快
使用短的命名替代长的模块命名,更便于阅读
2减少一些函数的调用
判断对象类型时,最好使用isinstance(),而不是type(),这样性能更好。
在一个循环里不要重复执行一个判断条件函数,例如:
whilei>len(a):
pass
#len()浪费不必的CPU计算资源
使用fromXimportY,替代importX;X.Y,可以减少查找模块次数。
3使用映射替代条件判断
映射的查找速度是远高于条件语句的,例如:
#判断的方式
ifa==1:
b==10
elifa==2:
b==20
#映射的方式
d={1:10,2:20}
b=d[a]
4直接迭代序列的元素
序列类型包括:str、list、tuple,直接迭代序列元素币迭代元素索引更快。
a=[1,2,3]
#直接迭代的方式
foritemina:
printitem
#通过索引的方式
foriinrange(len(a)):
printa[i]
5生成器替代列表推导
列表推导会产生一个空的list,而生成器是延时产生数据的,对内存更友好。
#列表推导
l=sum([len(word)forlineinfforwordinline.split()])
#生成器
l=sum(len(word)forlineinfforwordinline.split())
6先编译后执行
如果需要eval()和exec()执行code,最好先编译成bytecode,所以使用compile()编译替代str。
其中正则表达式也先编译,再匹配,例如:
re.complie()
7模块程序运行习惯
在模块里要执行一些测试的时候,要注明主函数,如:
defmain():
pass
if__name__=='__main__':
main()
这样避免引用时,导致不必要的执行。