分享

Python代码加速的10个最佳实用技巧

 InfoRich 2021-04-12
如果有人问你 ——“现在世界上增长最快的编程语言是什么?”答案很简单。那就是 Python。由于其简单的语法和丰富的库,它在世界范围内受到欢迎。现在,你几乎可以用python做任何事情:数据科学、机器学习、信号处理、数据可视化——你能想到的都可以。然而,许多人声称Python在解决严重问题时有点慢。但是,执行程序的时间取决于编写的代码。通过一些提示和技巧,可以加速Python代码并提高程序的性能。

加速Python代码的提示和技巧

如果您正在寻找提高python代码速度的方法,这篇文章很适合您。阐述了减少程序执行时间的技术和策略。这些技巧不仅可以加快代码的速度,还可以提高Python技能。
1、使用内置库和函数
Python有大量的库函数和模块。它们是由专业的开发人员编写的,并经过了多次测试。因此,这些函数是非常高效的,并有助于加速代码——如果函数在库中已经可用,则不需要编写代码。在这方面,我们举一个简单的例子。
#code1
newlist = []
for word in oldlist:
newlist.append(word.upper())
#code2
newlist = map(str.upper, oldlist)
在这里,第二段代码比第一段代码快,因为使用了库函数map()。这些函数对初学者来说很方便。谁不想编写更快、更简洁、更小的代码呢?因此,尽可能多地使用库函数和模块。
2、正确的数据结构在正确的位置
Image
使用适当的数据结构将减少运行时。在开始之前,您必须考虑将在代码中使用的数据结构。一个完美的数据结构会加快python代码的速度,而其他人会把它搞砸。你必须了解不同数据结构的时间复杂性。
Python有内置的数据结构,如列表(list)、元组(tuple)、set和字典(dictionary)。人们习惯于使用列表。但在某些情况下,元组或字典比列表工作得好得多。
3、尽量减少使用for循环
很难避免使用for循环。但专家说,只要你有机会预防,你就会去做。For循环在python中是动态的。它的运行时间比while循环要长。嵌套的for循环更耗时。两个嵌套的for循环将在一个for循环中占用时间的平方。
#code1
for i in big_it:
m = re.search(r'\d{2}-\d{2}-\d{4}', i)
if m:
...
#code2
date_regex = re.compile(r'\d{2}-\d{2}-\d{4}')

for i in big_it:
m = date_regex.search(i)
if m:
...
在这种情况下,最好使用合适的替代品。此外,如果不可避免要使用for循环,则将计算移出循环。这样可以节省很多时间。我们可以从上面的例子中看到这一点。在这里,第二个代码比第一个代码快,因为计算是在循环之外完成的。
4、避免使用全局变量
在许多情况下,python都使用全局变量。全局关键字用于声明它。但是这些变量的运行时间要比局部变量的运行时间长。使用更少的内存可以避免不必要的内存使用。此外,Python抓取局部变量比抓取全局变量更快。当导航外部变量时,Python确实是缓慢的。
其他几种编程语言反对计划外使用全局变量。计数器是由于副作用导致更高的运行时。因此,尽可能使用局部变量而不是全局变量。此外,您可以在循环中使用它之前制作一个本地副本,从而节省时间。
5、增加列表推导式(List Comprehension)的使用
列表推导式(List Comprehension)提供了更短的语法。当基于现有列表创建新列表时,这种情况很少。在任何代码中循环都是必须的。有时,循环中的语法变得很大。在这种情况下,可以使用列表推导式。我们可以举个例子来更准确地理解它。
#code1
square_numbers = []
for n in range(0,20):
if n % 2 == 1:
square_numbers.append(n**2)
#code2
square_numbers = [n**2 for n in range(1,20) if n%2 == 1]

Image

在这里,第二个代码比第一个代码花费的时间少。列表理解的方法更短,更精确。在小代码中可能不会有太大区别。但在大规模开发中,它可以为您节省一些时间。所以,只要你有机会加速你的Python代码,就使用列表理解。
6、用xrange()替换range()
用xrange()替换range()如果你使用python 2, range()和xrange()的问题就来了。这些函数用于在for循环中迭代任何内容。对于range(),它将范围内的所有数字保存在内存中。但是xrange()只保存需要显示的数字范围。
range()的返回类型是一个列表,xrange()的返回类型是一个对象。最终,xrange()占用的内存更少,因此时间也更少。因此,尽可能使用xrange()而不是range()。当然,这只适用于Python 2用户。
7、使用生成器(Generators)
在Python中,生成器是在调用关键字yield时返回迭代器的函数。生成器是优秀的内存优化器。它们每次只返回一个项,而不是一次返回所有项。如果列表中包含大量数据,而您需要一次使用一个数据,那么使用生成器。

生成器以块计算数据。因此,函数可以在被调用时返回结果并保留其状态。生成器通过在调用者生成值后停止代码来保存函数状态,并在请求时从停止的地方继续运行。
由于生成器访问并计算按需值,因此很大一部分数据不需要完全保存在内存中。它会节省相当多的内存,最终加快代码的速度。
8、用Join连接字符串
串接在处理字符串时非常常见。通常,在python中,我们使用' + '进行连接。但是,在每个步骤中,“+”操作创建一个新的字符串并复制旧的材料。这个过程效率很低,而且花费很多时间。如果我们想要加快Python代码的速度,我们必须使用join()来连接字符串。
#code1
x = 'I' + 'am' + 'a' + 'python' + 'linuxmi.com'
print(x)
#code2
x = ' '.join(['I', 'am', 'a', 'python', 'linuxmi.com'])
print(x)

Image

如果我们看一下这个例子,第一个代码打印的是“Iamapythonlinuxmi.com”,第二个代码打印的是“I am a python linuxmi.com”。join()操作比' + '更高效、更快。它还能保持代码整洁。谁不想要更快更干净的代码呢?因此,尝试使用join()而不是' + '来连接字符串。
9、分析您的代码
代码分析是优化代码的经典方法。有许多模块来测量程序的统计数据。这让我们知道程序在哪里花费了太多时间,以及如何优化它。所以,为了保证优化,进行一些测试,并增强程序,提高效果。
计时器是剖析器之一。您可以在代码的任何地方使用它,并找到每个阶段的运行时。然后我们可以改进花费太长时间的程序。此外,还有一个内置的分析器模块叫做LineProfiler。它还提供了一份关于所消耗时间的描述性报告。
10、保持更新-使用最新版本的Python
有成千上万的开发人员定期向python添加更多的特性。我们今天使用的模块和图书馆功能将在明天的发展中过时。Python开发人员正在使这门语言变得越来越快、越来越可靠。每个新版本都提高了它的性能。
因此,我们需要将库更新到最新版本。Python 3.9现在是最新版本。python 2的许多库可能不能在Python3上运行。让我们记住这一点,并始终使用最新版本来获得最佳性能。
最后,个人见解
Python开发人员的价值正在与日俱增。那么,你还在等什么呢!现在是您开始学习加快Python代码的时候了。我们提供的提示和技巧肯定会帮助您编写高效的代码。如果你遵循它们,我们希望你可以改进你的代码,学习更高级的Python知识。
我们试图展示加速代码所需的所有主要技巧和提示。我们希望这篇文章已经回答了您的大部分问题。现在,剩下的就看你了。然而,知识没有止境,学习也没有止境。所以,如果我们错过了什么重要的东西,请告诉我们。祝学习快乐!

关注我们

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多