十个python性能调优小技巧,你知道几个?(代码片段)

传智教育官方博客 传智教育官方博客     2023-02-05     762

关键词:

1 多多使用列表生成式

替换下面代码:

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

为列表生成式写法:

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

2 内置函数

尽可能多使用下面这些内置函数:

3 尽可能使用生成器

单机处理较大数据量时,生成器往往很有用,因为它是分小片逐次读取,最大程度节省内存,如下网页爬取时使用yield

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('<a href="([^"]+)">', str(page.content)): 
      if url[0] == '/': 
        url = current_page + url[1:] 
      if pattern.match(url): 
        pages_to_visit.append(url) 
    # yield 
    yield current_page 
webpage = get_pages('http://www.example.com') 
for result in webpage: 
  print(result) 

4 判断成员所属关系最快的方法使用 in

for name in member_list: 
  print(' is a member'.format(name)) 

5 使用集合求交集

替换下面代码:

a = [1,2,3,4,5] 
b = [2,3,4,5,6] 
 
overlaps = [] 
for x in a: 
  for y in b: 
    if x==y: 
      overlaps.append(x) 
 
print(overlaps) 

修改为set和求交集:

a = [1,2,3,4,5] 
b = [2,3,4,5,6] 
 
overlaps = set(a) & set(b) 
 
print(overlaps) 

6 多重赋值

Python支持多重赋值的风格,要多多使用

first_name, last_name, city = "Kevin", "Cunningham", "Brighton" 

7 尽量少用全局变量

Python查找最快、效率最高的是局部变量,查找全局变量相对变慢很多,因此多用局部变量,少用全局变量。

8 高效的itertools模块

itertools模块支持多个迭代器的操作,提供最节省内存的写法,因此要多多使用,如下求三个元素的全排列:

import itertools 
iter = itertools.permutations(["Alice", "Bob", "Carol"]) 
list(iter) 

9 lru_cache 缓存

位于functools模块的lru_cache装饰器提供了缓存功能,如下结合它和递归求解斐波那契数列第n:

import functools 
 
@functools.lru_cache(maxsize=128) 
def fibonacci(n): 
  if n == 0: 
    return 0 
  elif n == 1: 
    return 1 
  return fibonacci(n - 1) + fibonacci(n-2) 

因此,下面的递归写法非常低效,存在重复求解多个子问题的情况:

def fibonacci(n): 
  if n == 0: # There is no 0'th number 
    return 0 
  elif n == 1: # We define the first number as 1 
    return 1 
  return fibonacci(n - 1) + fibonacci(n-2) 

10 内置函数、key和itemgetter

上面提到尽量多使用内置函数,如下对列表排序使用key,operator.itemgetter:

import operator 
my_list = [("Josh", "Grobin", "Singer"), ("Marco", "Polo", "General"), ("Ada", "Lovelace", "Scientist")] 
my_list.sort(key=operator.itemgetter(0)) 
my_list 

作者:程序员zhenguo来源:今日头条

网页搜索(百度谷歌)你不得不知道的十个小技巧(代码片段)

网页搜索(百度谷歌)你不得不知道的十个小技巧百度搜索广告多,谷歌搜索搜不到东西,这时候,你得问问自己——你,用对姿势了么?文章目录网页搜索(百度谷歌)你不得不知道的十个小... 查看详情

「干货」让python性能起飞的15个技巧,你知道几个呢?

参考技术A前言Python一直以来被大家所诟病的一点就是执行速度慢,但不可否认的是Python依然是我们学习和工作中的一大利器。本文总结了15个tips有助于提升Python执行速度、优化性能。关于Python如何精确地测量程序的执行时间,... 查看详情

chrome性能调优技巧(代码片段)

...大型Web应用或复杂交互的网站,不免会遇到一些页面性能瓶颈的问题。本篇介绍一下如何利用Chrome的性能面板分析网站的性能瓶颈,应该对你有所帮助。注意,为了减少一些Chrome插件对性能评估产生噪音,最好打... 查看详情

真实世界的 Clojure 性能调优技巧?

】真实世界的Clojure性能调优技巧?【英文标题】:RealworldClojureperformancetuningtips?【发布时间】:2011-04-0508:44:16【问题描述】:我看到Clojure应用程序的“某些”部分出现严重的减速。关于如何对clojure应用程序进行性能调优,有人... 查看详情

9个java性能调优技巧,yyds!

...”,和你一起掌握更多数据库知识大多数开发者认为性能优化是一个复杂的话题,它需要大量的工作经验和相关知识理论。好吧,这也不完全错。优化一个应用做到性能最优化可能不是件容易的任务,但是这并不... 查看详情

mysql性能调优和优化技巧(代码片段)

...数据。对于大型应用程序,庞大的数据量可能会导致性能问题。本指南提供了一些关于如何提高MySQL数据库性能的调优技巧。先决条件安装并运行MySQL的Linux系统,Centos或Ubuntu现有数据库操作系统和数据库的管理员凭据系... 查看详情

jvm调优技巧-内存抖动xms和xmx参数为什么要设置相同的值(代码片段)

前言在网上看到大部分的帖子都有介绍性能调优的案例,其中有一项就是告诉你Xms和Xmx参数一定要设置成相同的,这样就可以达到优化的目的,就像这样-Xms1024m-Xmx1024m但是却没说为什么要这么设置,那么这篇文章... 查看详情

jvm调优技巧-内存抖动xms和xmx参数为什么要设置相同的值(代码片段)

前言在网上看到大部分的帖子都有介绍性能调优的案例,其中有一项就是告诉你Xms和Xmx参数一定要设置成相同的,这样就可以达到优化的目的,就像这样-Xms1024m-Xmx1024m但是却没说为什么要这么设置,那么这篇文章... 查看详情

go开源宝藏基于golang语法的性能调优技巧(数组的遍历)(代码片段)

1.数组的遍历数组和切片的遍历方式一样,所以我们这里就不进行区分。我们一般用以下两种方式直接取下标方式fori:=0;i<len(nums);i++ ...我们先来讲一下这种方式,我们都知道数组在内存中存储是连续的。所以我... 查看详情

Hibernate 性能调优技巧

】Hibernate性能调优技巧【英文标题】:Hibernateperformancetuningtips【发布时间】:2016-09-0803:37:45【问题描述】:我正在开发一个小型应用程序,它由一个表组成。我使用的技术是:NetBeans8.1爪哇8休眠4.3.xInformixPrimefaces5我不得不调查连... 查看详情

关于java性能调优的11个简单技巧

...多数据库知识源 / Java联盟相信大多数的小伙伴都会觉着性能优化是一件很复杂的事,那么是不是呢?优化应用程序获得最佳性能并不是一件容易的事。它需要一定的经验和知识。那么,我们现阶段还不具备这样的经... 查看详情

北大青鸟java培训:java性能调优都有哪些技巧?

参考技术A大多数Java开发人员都认为性能优化是复杂的,需要大量的经验和知识。其实这样的说法是有一定的道理的,一般情况下,优化应用程序以获得最好的性能不是一件容易的事。但这并不意味着如果你没有知识,你什么也... 查看详情

go开源宝藏基于golang语法的性能调优技巧(字符串拼接)(代码片段)

文章目录字符串拼接参考链接字符串拼接我们一般使用字符串拼接方式有三种直接拼接str+="sum"fmt.Sprintf(“%s”,xxxxx)使用string.Builder使用bytes.Builder使用byte进行拼接我们先来写一个benchmark去测试每一种字符串拼接的情况... 查看详情

性能调优接口平台服务性能优化(代码片段)

...,并未发现可疑点三、cProfiler分析使用【调优工具】python性能分析工具cProfiler针对 查看详情

spark调优小表join大表数据倾斜解决方案

...in,此时就是reducejoin,此时如果发生数据倾斜,影响处理性能,而此时恰好一个RDD是比较小的,则可以采用广播小RDD全量数据+map算子来实现与join同样的效果,也就是mapjoin,因为这样不会发生shuffle,也就不会发生数据倾斜。 ... 查看详情

性能调优之三十六计——「取而代之」echo/json篇(代码片段)

文章目录性能调优之三十六计——「取而代之」Echo/Json篇Echo高性能、极简框架C.JSONJson-iteratorQ&A附录性能调优之三十六计——「取而代之」Echo/Json篇性能调优是每一个程序员进阶的毕竟之路,掌握各种调优技巧,对自... 查看详情

性能调优之三十六计——「取而代之」echo/json篇(代码片段)

文章目录性能调优之三十六计——「取而代之」Echo/Json篇Echo高性能、极简框架C.JSONJson-iteratorQ&A附录性能调优之三十六计——「取而代之」Echo/Json篇性能调优是每一个程序员进阶的毕竟之路,掌握各种调优技巧,对自... 查看详情

java性能优化的9个工具,你知道几个?

...,发现最近我们的关注点已经开始转换到如何提升Java性能。在这篇文章中,我会带着大家一起看一下 查看详情