我们只需4/30即可调整Futureestack注册。条款和条件适用。 现在注册

6 Python性能提示

6分钟阅读

Python是一种很酷的语言,因为你可以在这么短的时间内与它一起做得很多,但代码很少。不仅,它不仅支持许多任务,例如多处理,轻松。

Python DetRactors有时索赔Python很慢。但它不一定是这样的:尝试这六个提示来加快Python应用程序。

shutterstock_174281696_python.

1.依靠关键代码的外部包

Python使许多编程任务简单,但它可能并不总是具有时间关键任务的最佳性能。使用C,C ++或Machine语言外部包以用于时间关键任务,可以提高应用程序性能。这些包是特定于平台的,这意味着您需要为您使用的平台提供适当的包。简而言之,此解决方案提供了一些应用程序的可移植性以换取性能,只能通过直接编程到底层主机。以下是某些包您应该考虑添加到您的性能arsenal:

包以不同的方式行事。例如,Pyrex使得可以扩展Python以做像使用C数据类型的事情,以使内存任务更有效或简单。Pyinline允许您直接在Python应用程序中使用C代码。内联代码是单独编译的,但它在一个地方保持一切,同时利用C可以提供的效率。

2.使用键进行排序

在那里有很多真正的旧Python排序代码将花费您在运行时在实际执行排序时创建自定义排序和速度的时间。排序项目的最佳方法是尽可能使用键和默认排序()方法。例如,考虑以下代码:

导入运算符somelist = [(1,5,8),(6,2,4),(9,7,5)] somelist.sort(key =运算符.Itemptter(0))somelist #output = [(1,5,8),(6,2,4),(9,7,5)] somelist.sort(key =运算符.Itemptter(1))somelist #output = [(6,2,4),(1,5,8),(9,7,5)] somelist.sort(key =运算符.Itemptter(2))somelist #output = [(6,2,4),(9,7,5),(1,5,8)],

在每种情况下,列表根据您选择的索引作为关键参数的一部分进行排序。这种方法与数字一样有效地与字符串一样。

3.优化循环

每个编程语言强调需要优化循环。使用Python时,您可以依靠大量的技术来使循环运行更快。但是,一个方法开发人员经常错过是避免在循环中使用点。例如,考虑以下代码:

Lowerlist = ['this', 'is', '小写']upper = str.upper upperlist = [] append = upperlist。append for word in lowerlist: append(upper(word)) print(upperlist) #Output = ['THIS', 'IS', '小写']

每次打电话给str.upper时,Python会评估该方法。但是,如果将评估放在变量中,则该值已知并且Python可以更快地执行任务。这一点是减少Python在循环中执行的工作量,因为Python的解释性质可以在这些实例中真正慢下来。

笔记:优化循环的方法有很多;这只是其中之一。例如,许多程序员会这么说列出理解是在循环中实现速度效益的最佳方法。关键是优化循环是实现更高应用程序速度的更好方法之一。)

4.使用较新版本

在线搜索Python信息的任何人都会发现无数消息,要求从一个版本的Python移动到另一个版本。通常,每个版本的Python都包含优化,使其比以前的版本更快。限制因素是您最喜欢的库是否也转到了较新版本的Python。不是询问是否应该制作举动,而是确定新版本有足够的支持,以便移动可行的何时。

您需要验证您的代码仍然运行。您需要使用您获得的新图书馆与新版本的Python一起使用,然后检查您的应用程序进行破坏更改。只有在您完成所需的修正后,您会注意到任何区别。

但是,如果您只是确保您的应用程序在新版本中运行,那么您可能会错过更新中发现的新特性。一旦你开始移动,在新版本下分析你的应用程序,检查问题区域,然后更新这些区域以首先使用新版本的特性。用户将在升级过程的早期看到更大的性能提升。

5.尝试多种编码方法

每次创建应用程序时,使用精确相同的编码方法将几乎肯定会导致应用程序运行的某些情况,而不是它可能会慢。尝试一点实验作为分析过程的一部分。例如,当管理字典中的项目时,您可以采取安全方法确定项目是否已存在并更新它,或者您可以直接添加该项目,然后处理项目不存在的情况作为异常。考虑第一个编码示例:

n = 16 mydict = {}在范围内(0,n):char ='abcd'[i%4]如果char不在mydict:mydict [char] = 0 mydict [char] + = 1 print(mydict)

此代码通常将在何时运行更快默德德是空的开始。但是,当默德德通常填充(或至少主要填充)数据,替代方法更好地工作。

n = 16 mydict = {}在范围内(0,n):char ='abcd'[i%4] try:mydict [char] + = 1除了keyerror之外:mydict [char] = 1打印(Mydict)

输出{'d':4,'c':4,'b':4,'a':4}两种情况都是一样的。唯一的区别是如何获得输出。在框外思考并创建新的编码技术可以帮助您使用您的应用程序获得更快的结果。

6.交叉编译您的申请

开发人员有时会忘记计算机实际上不会说出用于创建现代应用程序的任何语言。计算机讲机器代码。为了运行应用程序,您使用应用程序将您使用的人类可读代码转换为计算机可以理解的东西。有时候以一种语言编写应用程序,例如Python,并以另一种语言运行,例如C ++,从绩效角度来看。这取决于您希望应用程序的作用以及主机系统可以提供的资源。

一个有趣的交叉编译器,Nuitka.,将你的Python代码转换为c++代码。其结果是,您可以以本机模式执行应用程序,而不是依赖于解释器。根据平台和任务的不同,您可以看到性能的显著提高。

笔记:Nuitka目前处于Beta,因此请使用它小心生产应用。事实上,它现在最好用于实验。还有一些讨论至于交叉编译是实现更好性能的最佳方式。开发人员多年来使用交叉编译来实现特定目标,例如更好的应用速度。请记住,每个解决方案都有权衡,您应该在使用生产环境中的解决方案之前考虑它们。)

使用交叉编译器时,请确保它支持使用的Python版本。Nuitka支持Python 2.6、2.7、3.2和3.3。要使这个解决方案工作,您需要一个Python解释器和一个c++编译器。Nuitka支持许多c++编译器,包括Microsoft Visual Studio明朝, 和clang / llvm.

交叉编译可以带来一些严重的缺点。例如,在使用Nuitka时,您发现即使是一个小程序也可以消耗主要的驱动器空间,因为Nuitka使用许多动态链路库(DLL)实现Python功能。因此,如果您正在处理资源受限系统,则此解决方案可能无法运行。

底线

本文中的六个提示中的每一个都可以帮助您创建更快的Python应用程序。但没有银子的子弹。没有一个技巧每次都会起作用。一些工作比其他特定版本的Python-open甚至平台都会有所作为。您需要配置您的应用程序以确定它慢慢运行的位置,然后尝试最佳地址这些问题的提示。

图像礼貌的shutterstock.com.