当前位置: 首页 > 科技观察

总结了十个Python性能调优技巧,你知道几个?

时间:2023-03-15 16:58:22 科技观察

1用列表生成替换下面的代码:cube_numbers=[]forninrange(0,10):ifn%2==1:cube_numbers.append(n**3)是列表生成:cube_numbers=[n**3forninrange(1,10)ifn%2==1]2内置函数尽量使用以下内置函数:3单机处理大量数据时,尽量使用生成器,生成器经常有用,因为它是一个一个的小块读取,最大程度的节省内存。爬取以下网页时使用yield。importrequestsimportredefget_pages(link):pages_to_visit=[]pages_to_visit.append(link)pattern=re.compile('https?')whilepages_to_visit:current_page=pages_to_visit.pop(0)page=requests.get(current_page)forurlinre.findall('',str(page.content)):ifurl[0]=='/':url=current_page+url[1:]ifpattern.match(url):pages_to_visit。append(url)#yieldyieldcurrent_pagewebpage=get_pages('http://www.example.com')forresultinwebpage:print(result)4确定成员关系最快的方法是使用informnameinmember_list:print('{}isamember'.format(name))5使用setintersection替换如下代码:a=[1,2,3,4,5]b=[2,3,4,5,6]overlaps=[]forxina:foryinb:ifx==y:overlaps.append(x)print(overlaps)改为set和intersectionset: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使用asfewglobal多变的尽可能找最快最高效的Python最高的是局部变量,全局变量的查找要慢很多,所以多用局部变量,少用全局变量。8Efficientitertoolsmoduleitertools模块支持多个迭代器的运行,提供了最节省内存的写法,所以应该多用。找到三个元素的完整排列如下:importitertoolsiter=itertools.permutations(["Alice","Bob","Carol"])list(iter)9lru_cache位于functools模块中的lru_cache装饰器提供缓存功能,结合递归求解第n个斐波那契数列如下:importfunctools@functools.lru_cache(maxsize=128)deffibonacci(n):ifn==0:return0elifn==1:return1returnfibonacci(n-1)+fibonacci(n-2)所以下面的递归写法效率很低,有重复求解多个子问题的情况:defbonacci(n):ifn==0:#Thereisno0'thnumberreturn0elifn==1:#Wedefinethefirstnumberas1return1returnfibonacci(n-1)+fibonacci(n-2)10上面提到的内置函数key和itemgetter尽量多使用内置函数,如下使用key进行列表排序,operator.itemgetter:importoperatormy_list=[("Josh""Grobin","Singer"),("Marco","Polo","General"),("Ada","Lovelace","Scientist")]my_list.sort(key=operator.itemgetter(0))my_list