我的Python程序太慢了,如何提高它的速度?

我的Python程序太慢了,如何提高它的速度?

如果你的Python程序运行得太慢了,你可以根据以下提示和技巧来进行优化:

更多Python相关文章,请阅读:Python 教程

抽象

避免过度抽象,特别是过多的小函数或方法。抽象往往会创建间接性,迫使解释器工作更多。如果间接性的层数超过了有用工作的数量,你的程序就会变慢。

避免循环开销

如果循环的主体很简单,那么循环本身的解释器开销可能会占据很大一部分开销。这时,map函数的工作表现会更好。唯一的限制是map的循环体必须是函数调用。

例子

让我们看一个循环的例子:

newlist = []
for word in oldlist:
   newlist.append(word.upper())
Python

我们可以使用map来避免上面循环的开销:

newlist = map(str.upper, oldlist)
Python

使用列表推导式

使用列表推导式所需的开销比for循环少。让我们来看一下使用列表推导式实现同样的例子:

newlist = [s.upper() for s in oldlist]
Python

生成器表达式

生成器表达式是在Python 2.4中引入的。它们被认为是循环的最佳替代品,因为它避免了一次生成整个列表的开销。它们返回一个生成器对象,该对象可以一点一点地迭代:

iterator = (s.upper() for s in oldlist)
Python

局部变量

Python访问局部变量比全局变量要高效得多。我们可以使用局部变量本身来实现上面的例子:

def func():
   upper = str.upper
   newlist = []
   append = newlist.append
   for word in oldlist:
      append(upper(word))
   return newlist
Python

导入语句开销

导入语句可以很容易地执行。通常有用的做法是将它们放在函数内部以限制它们的可见性和/或减少初始启动时间。在某些情况下,反复执行导入语句可能会严重影响性能。

连接字符串

当使用Join连接许多字符串时,这是更好和更快的选项。然而,当字符串不多时,使用+运算符进行连接更有效。它执行时间更短。让我们用两个例子来看看这个问题:

使用+运算符连接许多字符串

例子

我们现在将连接许多字符串,并使用time模块检查执行时间:

from time import time
myStr =''
a='gjhbxjshbxlasijxkashxvxkahsgxvashxvasxhbasxjhbsxjsabxkjasjbxajshxbsajhxbsajxhbasjxhbsaxjash'
l=[]

# 使用 + 运算符
t=time()
for i in range(1000):
   myStr = myStr+a+repr(i)
print(time()-t)
Python

输出

0.003464221954345703
Python

使用 Join 连接多个字符串

例子

我们现在将使用 Join 来连接许多字符串,并检查执行时间。当我们有许多字符串时,Join 是更好和更快的选择 –

from time import time

myStr =''
a='gjhbxjshbxlasijxkashxvxkahsgxvashxvasxhbasxjhbsxjsabxkjasjbxajshxbsajhxbsajxhbasjxhbsaxjash'
l=[]

# 使用 Join
t=time()
for i in range(1000):
   l.append(a + repr(i))
z = ''.join(l)
print(time()-t)
Python

输出

0.000995635986328125
Python

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册