精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

教你幾招,Python性能提升30%!

開發 后端
優化之前,首先要找到是哪部分代碼拖慢了整個程序的運行。有時候程序的"瓶頸"不是很明顯,如果找不到,以下是一些建議以供參考。

本文主要分享如何提升Python性能的幾個使用方法! 

時序分析

優化之前,首先要找到是哪部分代碼拖慢了整個程序的運行。有時候程序的"瓶頸"不是很明顯,如果找不到,以下是一些建議以供參考: 

注意:這是一個計算e的x次冪的演示程序(出自Python文檔): 

  1. # slow_program.py  
  2. from decimal import*  
  3. defexp(x):  
  4.     getcontext().prec +=2  
  5.     i, lasts, s, fact, num =0, 0, 1, 1, 1  
  6.     while s != lasts:  
  7.         lasts = s  
  8.         i +=1  
  9.         fact *= i  
  10.         num *= x  
  11.         s += num / fact  
  12.     getcontext().prec -=2  
  13.     return+s  
  14. exp(Decimal(150))  
  15. exp(Decimal(400))  
  16. exp(Decimal(3000)) 

在GitHub上查看rawslow_program.py全部代碼

最省力的“性能分析”

首先,最簡單且最省力的解決方案是使用Unix的time命令:  

  1. ~ $ time python3.8  slow_program.py  
  2. real     0m11,058s  
  3. user     0m11,050s  
  4. sys      0m0,008s 

在GitHub上查看rawbase_time.shell全部代碼

如果只是給整個程序計時,它很有用,但還不足夠…… 

最詳細的性能分析

性能分析的另一方法是cProfile,從中能得到很大的信息量: 

  1. ~ $ python3.8 -m  cProfile -s time slow_program.py  
  2.          1297 function calls (1272 primitive  calls) in 11.081 seconds  
  3.    Ordered by: internal time  
  4.    ncalls   tottime  percall  cumtime   percall filename:lineno(function)  
  5.         3    11.079    3.693   11.079     3.693 slow_program.py:4(exp)  
  6.         1     0.000    0.000    0.002     0.002 {built-in method _imp.create_dynamic}  
  7.       4/1     0.000    0.000   11.081    11.081 {built-in method builtins.exec}  
  8.         6     0.000    0.000    0.000     0.000 {built-in method __new__ of type object at 0x9d12c0}  
  9.         6     0.000    0.000    0.000     0.000 abc.py:132(__new__)  
  10.        23     0.000    0.000    0.000     0.000 _weakrefset.py:36(__init__)  
  11.       245     0.000    0.000    0.000     0.000 {built-in method builtins.getattr}  
  12.         2     0.000    0.000    0.000     0.000 {built-in method marshal.loads}  
  13.        10     0.000    0.000    0.000     0.000 <frozen importlib._bootstrap_external>:1233(find_spec)  
  14.       8/4     0.000    0.000    0.000     0.000 abc.py:196(__subclasscheck__)  
  15.        15     0.000    0.000    0.000     0.000 {built-in method posix.stat}  
  16.         6     0.000    0.000    0.000     0.000 {built-in method builtins.__build_class__}  
  17.         1     0.000    0.000    0.000     0.000 __init__.py:357(namedtuple)  
  18.        48     0.000    0.000    0.000     0.000 <frozen importlib._bootstrap_external>:57(_path_join)  
  19.        48     0.000    0.000    0.000     0.000 <frozen importlib._bootstrap_external>:59(<listcomp> 
  20.         1     0.000    0.000   11.081    11.081 slow_program.py:1(<module> 
  21. ... 

在GitHub上查看rawcprofile.shell全部代碼

這里用cProfile模塊和time參數運行測試腳本,以便按內部時間(cumtime)對行進行排序。從中可以得到很多信息,以上所列結果約為實際輸出的10%。由此可見,exp函數就是拖慢程序的“罪魁禍首”(太神奇啦!),現在看看更詳盡的時序和性能分析...... 

對特定函數計時

已經知道拖慢程序運行的函數,下一步可使用簡單的修飾器,專門對該函數計時,不測量其余代碼。如下所示: 

  1. deftimeit_wrapper(func):  
  2.     @wraps(func)  
  3.     defwrapper(*args, **kwargs):  
  4.         start =  time.perf_counter()  # Alternatively, you  can use time.process_time()  
  5.         funcfunc_return_val = func(*args, **kwargs)  
  6.         end = time.perf_counter()  
  7.         print( {0:<10}.{1:<8} : {2:<8} .format(func.__module__, func.__name__, end - start))  
  8.         return func_return_val  
  9.     return wrapper 

在GitHub上查看rawtimeit_decorator.py全部代碼

該修飾器可以應用于功能測試,如下所示: 

  1. @timeit_wrapper  
  2. defexp(x):  
  3.     ...  
  4. print( {0:<10}{1:<8}{2:^8} .format( module ,  function ,  time ))  
  5. exp(Decimal(150))  
  6. exp(Decimal(400))  
  7. exp(Decimal(3000)) 

在GitHub上查看rawtimeit_decorator_usage.py全部代碼

輸出如下:  

  1. ~ $ python3.8  slow_program.py  
  2. module     function   time     
  3. __main__  .exp       :0.003267502994276583  
  4. __main__  .exp       :0.038535295985639095  
  5. __main__  .exp       : 11.728486061969306 

在GitHub上查看rawrun_with_timeit_decorator.shell全部代碼

要考慮的一個問題是實際/想要測量的時間類型是什么。Time程序包提供了time.perf_counter和time.process_time。兩者的區別是:perf_counter返回絕對值,其中包括Python程序進程未運行時的時間,因此可能會受計算機負載的影響;而process_time僅返回用戶時間(不包括系統時間),這僅是程序的運行時間。 

加快程序運行速度

[[314114]]

圖源:Unsplash

這是全文有趣的部分,關于如何加快Python的程序運行速度。我并沒有列出一些可以奇妙解決性能問題的小技巧或代碼段,而是涉及一般性的構想和策略,它們能極大地提高性能,某些情況下甚至能將性能提高30%。 

使用內置數據類型

顯而易見,內置數據類型運行很快,尤其是與自定義類型(例如樹或鏈表)相比。主要是因為內置程序是用C語言實現的,遠超過用Python編碼的運行速度。 

使用lru_cache緩存/記憶 

我已經在上一篇博文中講過這塊內容,但在此還是要用簡單的示例說明: 

  1. import functools  
  2. import time  
  3. # caching up to 12  different results  
  4. @functools.lru_cache(maxsize=12 
  5. defslow_func(x):  
  6.     time.sleep(2)  # Simulate long computation  
  7.     return x  
  8. slow_func(1)  # ... waiting for 2 sec before getting  result  
  9. slow_func(1)  # already cached - result returned  instantaneously!  
  10. slow_func(3)  # ... waiting for 2 sec before getting  result 

在GitHub上查看rawlru_cache.py全部代碼

以上函數使用time.sleep模擬大量運算。第一次使用參數1調用該函數時,返回結果需要2秒。再次調用時,結果已被緩存,因此會跳過函數主體并立即返回結果。更多內容請參見此處。 

使用局部變量

這與在每個作用域中查找變量的速度有關。我用了“每個作用域”這個字眼,因為它不僅僅是“使用局部變量還是全局變量”的問題。實際上,即使在函數的局部變量(最快)、類級屬性(如self.name-較慢)和全局變量(如導入的函數,time.time-最慢)之間,查找速度也有所不同。 

可以通過運行無用的任務來提高性能,如下所示: 

  1. #  Example #1  
  2. classFastClass:  
  3.     defdo_stuff(self):  
  4.         temp =self.value  # this speeds up lookup in loop  
  5.         for i inrange(10000):  
  6.             ...  # Do something with `temp` here  
  7. #  Example #2  
  8. import random  
  9. deffast_function():  
  10.     r = random.random  
  11.     for i inrange(10000):  
  12.         print(r())  # calling `r()` here, is faster than  global random.random() 

在GitHub上查看rawlocal_vars.py全部代碼

使用函數(Function)

這怎么和假想的不同?理論上調用函數不是會將更多的東西放到堆棧上,加大返回結果的負擔嗎?但實際上,使用函數確實能加快運行速度,這與前一點有關。將整個代碼放在一個文件中而非函數中,它是全局變量而非局部變量,運行速度就會慢得多。因此,可以將整個代碼包裹在main函數中并通過一次調用來加速代碼,如下所示: 

  1. defmain():  
  2.     ...  # All your previously global code  
  3. main() 

在GitHub上查看rawglobal_vars.py全部代碼

避免訪問屬性(Attribute)

可能拖慢程序的一個原因是使用點運算符(.)訪問對象屬性。該運算符通過使用__getattribute__方法觸發了字典查找,使代碼產生額外負擔。那么,如何避免或減少屬性訪問?  

  1. #  Slow:  
  2. import re  
  3. defslow_func():  
  4.     for i inrange(10000):  
  5.         re.findall(regex, line)  # Slow!  
  6. #  Fast:  
  7. from re import findall  
  8. deffast_func():  
  9.     for i inrange(10000):  
  10.         findall(regex, line)  # Faster! 

在GitHub上查看rawimports.py全部代碼

當心使用字符串

在循環里使用格式符(%s)或.format()時,字符串操作可能會變得非常慢。有沒有更好的選擇?Raymond Hettinger在最近發布的推文中提到:唯一應該使用的是f-string(格式化字符串常量),它是最易讀、最簡潔且最快捷的方法。根據這篇推文,下面列出了可用的方法(由快到慢): 

  1. f {s}{t}   # Fast!  
  2. s +    + t  
  3.    .join((s, t))  
  4.  %s %s % (s, t)  
  5.  {} {} .format(s, t)  
  6. Template( $s $t ).substitute(ss=s, tt=t)  # Slow! 

在GitHub上查看rawstrings.py全部代碼

本質上,生成器并沒有變得更快,因為它在設計上允許延遲計算以節省內存而非節約時間。然而節省的內存也可以加快程序實際運行速度。怎么做?如果有一個很大的數據集且不使用生成器(迭代器),那么數據可能會溢出CPU的L1 cache(1級緩存),這將大大減慢內存的查找速度。 

在性能方面,極重要的一點是:CPU可以將正在處理的所有數據盡可能地保存在緩存中。

[[314115]]

圖源:Unsplash

結語 

優化的首要規則就是“不優化”。 

若真的有必要優化,那我希望這些技巧會有所幫助。 

但是,優化代碼時一定要小心,因為優化的結果可能是代碼難以閱讀進而難以維護,這就得不償失了。 

最后,希望大家能搭上python號火箭,編碼越來越快! 

 

 

責任編輯:龐桂玉 來源: 機器學習算法與Python學習
相關推薦

2020-10-09 17:43:25

計算機CPU技術

2018-04-18 14:05:53

解鎖隱藏實力

2020-04-13 19:10:03

電腦噪音電競

2011-02-22 13:46:27

微軟SQL.NET

2021-10-29 10:32:45

數據 Navicat方法

2013-10-25 09:14:55

2022-09-13 16:01:13

購物車京東接口

2022-05-16 09:48:30

Google性能優化LCP

2025-08-01 07:36:26

2022-08-29 08:41:52

異步ControllerrunAsync

2018-10-29 15:35:19

路由器寬帶PC端

2010-01-22 09:01:02

2010-09-14 14:21:47

無線網絡升級設置

2021-09-27 21:07:40

華為MetaAAU

2024-12-30 09:03:09

2021-09-27 20:22:37

Massive MIMAAU天線

2015-08-14 09:56:23

防蹭網

2024-06-03 08:52:40

2025-10-10 05:56:11

2023-03-27 18:18:47

GPT-4AI
點贊
收藏

51CTO技術棧公眾號

色偷偷噜噜噜亚洲男人的天堂| 精品日韩视频在线观看| 91精品在线观看视频| 欧美日韩国产精品综合| 久久草在线视频| 91福利在线观看| 成人在线观看毛片| 国产一级二级三级在线观看| 精品一区二区三区欧美| 91av视频在线免费观看| 精品视频第一页| 成人av影音| 欧美日韩国产美女| 无码中文字幕色专区| yjizz视频网站在线播放| 粉嫩13p一区二区三区| 国产成人精品电影久久久| 国产精品白嫩白嫩大学美女| 九九热精品视频在线观看| 日韩一级片网址| 91福利国产成人精品播放| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美激情一区三区| 欧美性色欧美a在线播放| 日韩午夜在线影院| 国产视频一区二区三区在线播放 | 在线日韩中文字幕| 一级黄色片毛片| 欧洲美女精品免费观看视频 | 国产午夜精品久久久久久免费视 | 日韩三级在线| 亚洲欧美激情另类校园| 折磨小男生性器羞耻的故事| 黑人一区二区三区| 在线国产电影不卡| 男人操女人逼免费视频| xxxx另类黑人| 亚洲综合一区二区精品导航| 四虎影院一区二区| 日本蜜桃在线观看| 国产精品国产三级国产aⅴ原创| 免费看成人片| 日韩大片b站免费观看直播| 成人不卡免费av| 成人av免费电影| 成人h动漫精品一区二区无码| 国产一区二区中文字幕| 国产精品亚洲精品| 丰满人妻一区二区三区四区| 久久久精品网| 日本久久精品视频| 国产伦精品一区二区三区视频网站| 最新亚洲激情| 97avcom| 99热国产在线观看| 亚洲欧美不卡| 国产91免费看片| 亚洲毛片一区二区三区| 日韩高清在线电影| 国产精品久久久久久久久久久久久 | 精品久久中文| 色妞色视频一区二区三区四区| 亚洲最大成人综合网| 日韩精品dvd| 久久影院免费观看| 国产一级大片在线观看| 在线观看视频日韩| 欧美一区二区三区免费观看| 国产精品va无码一区二区三区| 久久一综合视频| 国产精品久久久久久久久免费| 伊人久久国产精品| 国产在线观看一区二区| 国产精品免费一区二区| 色视频免费在线观看| 国产农村妇女精品| 青少年xxxxx性开放hg| 欧美黄色视屏| 色综合天天综合网国产成人综合天 | 蜜桃视频一区二区| 亚洲在线视频福利| 四虎在线视频| 中文字幕亚洲成人| 欧美视频免费看欧美视频| 韩国美女久久| 欧美一区二区在线免费播放| 中文字幕人妻一区| 精品国产乱码久久久久久果冻传媒| 伊人伊成久久人综合网小说| 九九热视频精品| 日韩精品视频网站| 亚洲一区二区三区xxx视频| 欧美自拍偷拍第一页| 国产欧美精品一区二区色综合 | 久久精品亚洲a| 亚洲精品1区| 国产欧美精品xxxx另类| 日韩在线视频观看免费| 国产精品午夜免费| 成人精品视频在线播放| 97欧美成人| 亚洲国产精品久久久| 国产调教在线观看| 亚洲天堂男人| 国产日韩专区在线| 神马精品久久| 亚洲一区二区三区小说| 亚洲欧美自偷自拍另类| 麻豆国产欧美一区二区三区r| 日韩在线观看免费全集电视剧网站| 国产午夜免费视频| 韩国精品免费视频| 日韩一区二区三区高清| 97人澡人人添人人爽欧美| 3d成人动漫网站| 亚洲ⅴ国产v天堂a无码二区| 中日韩男男gay无套| 亚洲va欧美va国产综合久久| 国产女主播在线直播| 亚洲成精国产精品女| 久久精品国产露脸对白| 狠狠综合久久av一区二区蜜桃| 欧美日本在线视频中文字字幕| 中文字幕+乱码+中文字幕明步| 97精品国产97久久久久久久久久久久| 裸体大乳女做爰69| 日韩福利影视| 中文字幕视频一区二区在线有码| 久久黄色精品视频| 99久久精品久久久久久清纯| 亚洲爆乳无码精品aaa片蜜桃| 日韩五码电影| 色婷婷综合久久久久| 欧美一级淫片免费视频黄| 波多野结衣中文字幕一区二区三区| 女人床在线观看| 久久久国产精品入口麻豆| 日韩视频―中文字幕| 国产成人麻豆免费观看| 久久久久国产精品厨房| aaa毛片在线观看| 日韩电影在线观看完整免费观看| 97色在线观看| 视频午夜在线| 欧洲色大大久久| 免费看裸体网站| 蜜桃视频在线一区| 中文字幕日韩一区二区三区| 国产精品蜜月aⅴ在线| 中文字幕亚洲一区二区三区五十路| 天天干天天插天天射| 国产女主播一区| 污污动漫在线观看| **女人18毛片一区二区| 亚洲999一在线观看www| 伊人春色在线观看| 精品成人一区二区三区| 国产视频91在线| 国产天堂亚洲国产碰碰| 欧美婷婷精品激情| 亚洲成av人片乱码色午夜| 亚洲最大激情中文字幕| 蜜臀av在线| 日韩av一区二区在线观看| 无码人妻精品一区二区三区蜜桃91 | 亚洲综合精品四区| 日韩国产精品一区二区| 四虎视频在线精品免费网址| 欧美另类99xxxxx| 婷婷色在线观看| 91久久精品一区二区| 婷婷国产成人精品视频| 福利视频网站一区二区三区| 成人一对一视频| 成人在线丰满少妇av| 91久久嫩草影院一区二区| 超黄网站在线观看| 国产亚洲激情视频在线| 国产99久久九九精品无码免费| 亚洲一区二区三区四区中文字幕| 李宗瑞91在线正在播放| 久久99九九99精品| 国产v片免费观看| 日韩精品2区| 国产欧美日韩一区二区三区| 亚洲第一二三四区| 久久躁狠狠躁夜夜爽| 丝袜+亚洲+另类+欧美+变态| 欧美日韩二区三区| 日本一区二区网站| 中文字幕在线观看不卡视频| 国产女主播在线播放| 日韩精品一级二级| 男女猛烈激情xx00免费视频| 成人在线电影在线观看视频| 国产精品露出视频| 日韩欧国产精品一区综合无码| 欧美激情在线播放| 成a人片在线观看www视频| 欧美成人一级视频| 最新黄色网址在线观看| 午夜伦理一区二区| 四虎884aa成人精品| 国产亚洲成aⅴ人片在线观看| 性一交一黄一片| 美女脱光内衣内裤视频久久网站| 毛片在线播放视频| 欧美~级网站不卡| 亚洲国产一区二区三区在线播| 超碰cao国产精品一区二区| 国产精选久久久久久| 偷拍自拍在线看| 久久久爽爽爽美女图片| 久久久久久久久免费视频| 亚洲色图综合网| 四虎精品在永久在线观看| 欧美不卡123| 国产色综合视频| 精品视频资源站| 一二三区免费视频| 欧美日韩国产在线播放| 国语对白在线播放| 国产精品免费视频一区| 国产精久久一区二区三区| 91麻豆国产精品久久| 性欧美18—19sex性高清| 国产精品123| 午夜激情影院在线观看| 久久国产精品一区二区| 中文久久久久久| 日韩制服丝袜av| www.欧美日本| 日韩av二区在线播放| 免费在线激情视频| 国产欧美一级| 久久成人免费观看| 国产一区二区精品| 91视频 -- 69xx| 欧美专区18| 成年人免费在线播放| 性久久久久久| 欧美日韩中文在线视频| 亚洲一区免费| 精品一区二区中文字幕| 免费看黄裸体一级大秀欧美| 好吊妞无缓冲视频观看| 另类国产ts人妖高潮视频| 777米奇影视第四色| 日日摸夜夜添夜夜添亚洲女人| 午夜免费一区二区| 麻豆国产一区二区| 毛片毛片毛片毛片毛| 国产福利一区在线| 中国特级黄色大片| 91老师片黄在线观看| 在线 丝袜 欧美 日韩 制服| 国产午夜亚洲精品午夜鲁丝片| 免费一级特黄3大片视频| 国产精品美女久久久久av爽李琼 | 精品三级久久久久久久电影聊斋| 亚洲欧美在线x视频| 激情综合闲人网| 色七七影院综合| 色婷婷av在线| 777777777亚洲妇女| 日韩经典一区| 亚洲一区中文字幕在线观看| 激情小说一区| 日韩wuma| 欧美精品色网| 欧美 日韩精品| 激情综合五月天| 亚洲熟女一区二区| 国产清纯美女被跳蛋高潮一区二区久久w| 国产传媒在线看| 亚洲一区二区三区激情| 免费av网站在线| 欧美一区二区三区思思人| 网站黄在线观看| 色小说视频一区| jizz一区二区三区| 国产精品视频白浆免费视频| 6080亚洲理论片在线观看| 久久草视频在线看| 93在线视频精品免费观看| 91视频 - 88av| 久久久精品日韩| 少妇高潮一69aⅹ| 国产亚洲人成网站| 欧美日韩免费一区二区| 色系网站成人免费| 亚洲经典一区二区| 在线观看亚洲视频| а√在线中文网新版地址在线| 国产精品免费一区| 老司机精品视频在线播放| 一区二区三区久久网| 国产一区二区三区久久久久久久久| 成人综合久久网| 国产三级精品在线| 国产无遮无挡120秒| 制服丝袜国产精品| 男男激情在线| 97欧美精品一区二区三区| 99精品女人在线观看免费视频| 免费一区二区三区在在线视频| 综合激情婷婷| 蜜桃免费在线视频| 2019国产精品| 日本亚洲欧美在线| 91精品国产综合久久婷婷香蕉 | 久久这里只有精品99| 日韩精选视频| 免费亚洲一区二区| 亚洲激情自拍| 动漫av在线免费观看| 日韩美女精品在线| 中文字幕视频二区| 亚洲热线99精品视频| 僵尸再翻生在线观看| 99国产精品久久久久老师| 午夜欧美在线| 国产原创精品在线| 国产日韩一级二级三级| 亚洲精品视频在线观看免费视频| 日韩欧美在线一区二区三区| 91大神xh98hx在线播放| 国产精品第七十二页| 性欧美xxxx免费岛国不卡电影| 日韩人妻无码精品久久久不卡| 国产一区二区按摩在线观看| 免费精品在线视频| 欧美精品在欧美一区二区少妇| 东热在线免费视频| 国产成人小视频在线观看| 欧美精品第一区| 久章草在线视频| 久久精品视频在线看| 久久久精品福利| 亚洲天堂男人天堂女人天堂| 成人香蕉视频| 日本在线观看一区二区| 视频一区欧美日韩| 久久成人激情视频| 在线观看视频一区二区| 成年人视频在线观看免费| 国产精品久久久久久久av电影| 成人短片线上看| 国产精品一区二区小说| 成人欧美一区二区三区视频网页| 国产一区二区小视频| 久久精品国产久精国产思思| 国产高清日韩| av在线观看地址| 91免费观看在线| 欧美日韩a v| www日韩欧美| 2020最新国产精品| 免费黄色日本网站| 日本一区二区三区高清不卡| 中文字幕免费播放| 欧美xxxx做受欧美| 免费成人三级| 欧美性猛交久久久乱大交小说| 中文字幕精品—区二区四季| 国产精品视频无码| 欧美精品第一页在线播放| 琪琪久久久久日韩精品| 欧美黄色一级片视频| 国产精品久久久久毛片软件| 精品国精品国产自在久不卡| 午夜精品久久久久久久白皮肤 | 久久天堂av综合合色| 无人区乱码一区二区三区| 无码专区aaaaaa免费视频| 久久久精品欧美丰满| 一级特黄aaa大片| 国模极品一区二区三区| 精品国产一级毛片| 两女双腿交缠激烈磨豆腐| 香蕉加勒比综合久久| wwwww在线观看免费视频| 亚洲自拍欧美色图| 国产农村妇女毛片精品久久莱园子| 国产真人做爰视频免费| 日韩视频中午一区| av免费在线一区| 精品免费久久久久久久| 久久久久国产精品免费免费搜索| 国产毛片毛片毛片毛片| 57pao成人永久免费视频| 97视频热人人精品免费| av2014天堂网| 777午夜精品视频在线播放| 日本不卡网站| 久久免费视频2| 国产欧美一区二区精品性色 | 久久先锋影音av鲁色资源网| 国产精品久久影视| 日韩美女av在线免费观看|