📜  提高Python应用程序性能的技巧

📅  最后修改于: 2021-10-22 03:35:27             🧑  作者: Mango

Python …我们都知道这种语言的流行。 Python是一种强大的高阶编程语言。在当今的科技世界中,它几乎无处不在。无论您是在构建 Web 应用程序还是使用机器学习,这种语言都已成为开发人员的首选。在优化开发人员生产力方面, Python是第一位的。您可以立即创建程序并解决客户的业务问题。

提高 Python 应用程序性能的技巧

Python编写解决方案并不能保证它是经过优化的,但它会提高Python性能。但是,在使用Python编写代码时,您可以遵循一些策略来帮助您提高应用程序的性能。这些策略可以使您的应用程序更快。

一些技巧或策略会对执行产生重大影响,而其他技巧或策略会产生更小、更微妙的影响。让我们详细讨论这些技巧……

1. 使用内置函数

任何语言的内置函数总是有用的,因为您不需要从头开始编写代码。 Python。 Python附带了许多有用的库和内置函数。这些库有助于在开发项目的多个位置编写功能。您可以编写高质量、高效的代码,但很难击败底层库。

Python库经过了严格的优化和测试(就像您的代码一样)。这些内置函数很容易在您的项目中使用。你的项目中不会有多余的代码,代码会得到很好的优化。

2. 编写自己的生成器

在Python,尽可能使用生成器。它允许您一次返回单个项目,而不是一次返回所有项目。 Xrange()函数是Python 2 中的生成器,类似于Python 3 中的 range()函数。

如果您使用列表,则应该编写自己的生成器。生成器为您提供懒惰的评估,并且将有效地使用内存。如果您正在阅读大量大文件,生成器非常有用。您可以处理单个块而无需担心文件的大小。

下面是一个帮助你的例子……

import requests
import re

def get_pages(link):
  pages_to_visit = []
  pages_to_visit.append(link)
  pattern = re.compile('https?')
  while pages_to_visit:
    current_page = pages_to_visit.pop(0)
    page = requests.get(current_page)
    for url in re.findall('', str(page.content)):
      if url[0] == '/':
        url = current_page + url[1:]
      if pattern.match(url):
        pages_to_visit.append(url)
    yield current_page
webpage = get_pages('http://www.example.com')
for result in webpage:
  print(result)

上面的示例一次返回一个页面,执行某种操作。在上述情况下,我们正在打印链接。如果没有生成器,您需要在开始处理之前同时获取和处理数据或收集所有链接。在这种情况下,您的代码将更清晰、更快且更易于测试。

3. 使用列表推导式

就像在任何其他语言中一样,使用循环在Python很常见。您可能在Python使用过列表推导式。列表推导式是更快执行代码的好方法。列表推导式简洁,创建新列表更容易,因为它加快了过程。假设,您想找到特定范围内所有奇数的平方。您可以使用下面给出的循环来解决这个问题……

square_numbers = []
  for n in range(0,10):
    if n % 2 == 1:
      square_numbers.append(n**2)

你可以解决同样的问题,只需在一行中使用列表理解……

square_numbers = [n**2 for n in range(1,10) if n%2 == 1]

可以看到,第二种方法更加优化和可读。运行此代码后,您将获得更快的结果。小代码库中的所有这些技巧都有小范围。这种方法不会有太大的不同,但在其他情况下,当您尝试节省一些时间时,它会产生很大的不同。您的程序将运行得更快。

4. 使用 xrange() 代替 range()

在Python 2 中,为了迭代循环,我们可以使用 range() 和 xrange() 函数。第一个函数将范围内的所有数字存储在内存中,并且与范围一样线性变大。其他函数xrange() 返回生成器对象。如果您循环使用这些对象编号,则仅在需要时才在内存中可用。

import sys
counter = range(1, 70000)
print(sys.getsizeof(counter))

上面的代码返回 560064。如果你使用相同范围的 xrange,它将返回 40。如果你用Python 2 编写你的应用程序,那么交换函数将对内存使用产生很大的影响。在Python 3 中 xrange() 功能是默认实现的。如果没有 xrange()函数,那么 range()函数将像这样运行。

5. 使用集合和联合

如果您在代码中使用了太多循环,则会给服务器带来不必要的压力。这将是最有效的方法。您可以获得两个列表中的重叠值。您可以使用嵌套的 for 循环来执行此操作,如下所示……

a = [7,8,1,0,2]
b = [2,8,9,1,3]

overlaps = []
for x in a:
  for y in b:
    if x==y:
      overlaps.append(x)

print(overlaps)

上面的代码将打印列表 [8, 1, 2]。在这里,比较的数量会变得非常大,非常快。让我们看看另一种方法……

a = [7,8,1,0,2]
b = [2,8,9,1,3]

overlaps = set(a) & set(b)

print(overlaps)

上面的代码将打印字典 {8, 1, 2}。在这里,您将获得良好的速度和内存提升。

6. 懒惰的模块导入

Python专家建议在程序开始时导入所有模块。您可以按字母顺序对这些进行排序。这种方法将帮助您跟踪程序所具有的依赖项,但缺点是您的导入会在启动时加载。

你可以尝试不同的方法吗?您可以在需要时加载模块。这种技术将帮助您平均分配模块的加载时间,这将减少内存使用的峰值。

7. 如果可能,使用“in”

建议使用“in”关键字来检查列表的成员资格。

for username in member_list:
  print('{} is a member'.format(username))

结论

以上所有代码将帮助您更快地运行代码,这将使您从应用程序中获得更好的Python性能。随着您使用Python 的进步,您会发现许多技巧,并且您将自己学习在Python优化您的代码。您将在Python使用列表、字典、元组和许多其他东西,在构建逻辑或添加一些功能时,您会慢慢了解如何优化事物。