提高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()

这样避免引用时,导致不必要的执行。