python程序寫完后點哪個運行快_讓你的Python運行更快

討厭Python的人總是說,他們不想使用它的原因之一是它很 慢。嗯,特定程序(無論使用何種編程語言)是快還是慢,在很大程度上取決于編寫該程序的開發人員以及編寫優化而 快速的 程序的技能和能力 。

因此,讓我們證明一些人是錯誤的,讓我們看看如何改善Python程序的性能 并使它們真正更快!

時序分析

在開始進行任何優化之前,我們首先需要找出代碼的哪些部分實際上會使整個程序變慢。有時程序的瓶頸可能很明顯,但是如果您不知道它在哪里,那么這里有一些可供您選擇的選項:

最懶惰的“配置文件”

首先,最簡單和誠實的說是非常懶惰的解決方案-Unix time

命令:

如果您只想計時整個程序,這可能會起作用,通常這是不夠的……

最詳細的分析

另一端是 cProfile,它將為您提供 過多 信息:

在這里,我們使用cProfile模塊和 time 參數運行測試腳本 ,以便按內部時間(cumtime)對行進行排序 。這給了我們 很多信息,您在上面看到的行大約是實際輸出的10%。由此可見, exp 函數是罪魁禍首( Surprise,Surprise),現在我們可以更詳細地了解時序和性能分析...

時序特定功能

現在我們知道了將注意力轉移到哪里,我們可能想對慢速函數計時,而不用測量其余的代碼。為此,我們可以使用簡單的裝飾器:

然后可以將此裝飾器應用于待測功能,如下所示:

這給我們這樣的輸出:

有一點要考慮的是 什么樣的時間,我們其實(想)措施。時間包提供

time.perf_counter 和 time.process_time。此處的區別是perf_counter返回絕對值,其中包括Python程序進程未運行時的時間,因此它可能會受到計算機負載的影響。另一方面,process_time僅返回用戶時間(不包括系統時間),這僅是您的處理時間。

使其更快

現在是有趣的部分。讓我們讓您的Python程序運行得更快。我(大部分)不會向您展示一些可以神奇地解決您的性能問題的技巧,技巧和代碼段。這更多地是關于一般構想和策略的,這些構想和策略在使用時可能會對性能產生巨大影響,在某些情況下,最高可以提高30%。

使用內置數據類型

這個很明顯。內置數據類型非常快,特別是與樹或鏈接列表之類的自定義類型相比。這主要是因為內置程序是用C實現的 ,因此在使用Python進行編碼時我們的速度實在無法與之匹敵。

使用lru_cache緩存/記憶

使用局部變量

這與在每個作用域中查找變量的速度有關。我正在編寫 每個作用域,因為它不只是使用局部變量還是全局變量。實際上,即使在函數(最快),類級屬性(例如self.name ,較慢)和全局變量(例如,最慢)等全局 變量之間,查找速度實際上也有所不同 time.time 。您可以通過使用看似不必要(直接無用的)的分配來提高性能,如下所示:

使用函數

這似乎違反直覺,因為調用函數會將更多的東西放到堆棧上,并從函數返回中產生開銷,但這與上一點有關。如果僅將整個代碼放在一個文件中而不將其放入函數中,則由于全局變量,它的運行速度會慢得多。因此,您可以通過將整個代碼包裝在main函數中并調用一次來加速代碼 ,如下所示:

不訪問屬性

可能會使程序變慢的另一件事是 點運算符(.),在訪問對象屬性時使用。該運算符使用觸發字典查找 __getattribute__,這會在代碼中產生額外的開銷。那么,我們如何才能真正避免(限制)使用它呢?

當心字符串

當使用模數 (%s)或 .format()。進行循環運行時,字符串操作可能會變得非常慢 。我們有什么更好的選擇?我們唯一應該使用的是 f-string,它是最易讀,簡潔且最快的方法。因此,根據該推文,這是您可以使用的方法列表-最快到最慢:

生成器本質上并沒有更快,因為它們被允許進行惰性計算,從而節省了內存而不是時間。但是,保存的內存可能會導致您的程序實際運行得更快。怎么樣?好吧,如果您有一個很大的數據集,并且沒有使用生成器(迭代器),那么數據可能會溢出CPU L1緩存,這將大大減慢內存中值的查找。

就性能而言,非常重要的一點是CPU可以將正在處理的所有數據盡可能地保存在緩存中。

結論

優化的首要規則是 不這樣做。但是,如果確實需要,那么我希望這些技巧可以幫助您。但是,在優化代碼時要小心,因為它可能最終使您的代碼難以閱讀,因此難以維護,這可能會超出優化的好處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270829.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言理論作業—2

1.C語言基本數據類型及其占用的內存空間大小分別是:int:4字節,short[int]:2字節,long[int]:4字節,unsigned[int]:4字節,unsigned short[int]:2字節,unsigned long[int]:4字節,char:1字節&#x…

html 科幻模板,html5酷炫宇宙科幻周年慶典專題動畫模板

資源下載此資源下載價格為4D幣,請先登錄資源文件列表codedown123-0727-39/img/arrow-down-1.png , 1229codedown123-0727-39/img/arrow-down-2.png , 1190codedown123-0727-39/img/arrow-down-3.png , 1132codedown123-0727-39/img/asteroids-left.png , 7015codedo…

SQLServer數據庫設置項梳理

一、自動選項AUTO CLOSEON:數據庫將在最后一個用戶退出后完全關閉,它占用的資源也將釋放。當用戶嘗試再次使用該數據庫時,該數據庫將自動重新打開OFF:最后一個用戶退出后數據庫仍保持打開對于SQLServer Desktop Engine或 SQL Serv…

SQLServer創建數據庫詳解

1、創建數據庫介紹在創建數據庫之前,需要先確定數據庫的名稱、所有者、大小、存儲該數據庫的文件和文件組。數據庫所有者:創建數據庫的用戶。一般情況下,大多數產品對象由數據庫所有者擁有。2、創建數據庫注意事項創建數據庫需要擁有CREATE D…

Mac上IntelliJ IDEA設置類注釋和方法注釋帶作者和日期

在方法上標注注釋 1:idea左上角點擊Preferences 選擇Editor------Code Style----Live Templates 點擊右邊號 點擊Template Group,在彈框中添加一個分組 2:擊Template Group,在彈框中添加一個分組 3:選中新建的分組,點擊右邊號,選擇Live Template 4:在…

集群服務器分布式iis_Nginx+IIS分布式部署和負載均衡

標簽:1.IIS中部署2個網站創建2個網站,端口分別為9001、90022.下載Nginx可以進入Nginx官網進行下載,官網地址: http://nginx.org/,需要下載windows版的3.Nginx安裝3.1下載解壓到D盤根目錄下,打開conf目錄下的…

超級計算機的英語作文80字,英語作文_為什么這臺超級計算機如此快? (有聲) _滬江英語...

Why Is This Supercomputer So Superfast?Cray employees put the finishing touches on Titan at the Department of Energys Oak Ridge National Laboratory in Tennessee. The supercomputer may be the worlds fastest. Its designed to do 20 petaflops — or 20,000 tri…

HDU 1251 統計難題(Trie模版題)

統計難題 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 34909 Accepted Submission(s): 13109 Problem Description Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現)…

SQLServer數據庫收縮相關知識筆記

1、為什么要進行數據庫收縮?SQL Server 數據庫采取預先分配空間的方法來建立數據庫的數據文件或者日志文件,比如數據文件的空間分配了300MB,而實際上只占用了20MB空間,這樣就會造成磁盤存儲空間的浪費。可以通過數據庫收縮技術對數…

libvirt vnc花屏_centos6.5下VNC花屏解決方法

問題描述1、FusionCompute平臺搭建完成后,創建基于RHEL6.5 64bit版本的虛擬機,完成虛擬機初始安裝后,VNC界面出現花屏,無法登入Redhat桌面系統2、在創建虛擬機時,系統安裝向導配置了網絡,在花屏界面下可以通…

enum操作--獲取枚舉里的最大值

一個應用系統,如果程序里沒有任何enum的使用,我認為它的可讀性是有待商榷的。 求枚舉里的最大/最小枚舉值, 其實是對Array進行操作: enum EnumTest{ddd 2,eee} var arr1 Enum.GetValues(typeof(EnumTest)); //返回值是一個Array…

呂梁離石學校計算機專業在哪里,山西呂梁計算機大專學校有哪些太重技校告訴您...

山西呂梁計算機大專學校有哪些太重技校告訴您。選擇專業的***關鍵的因素是你自身的興趣,其他只能參考,如果你能準確的知道自己的興趣所在,未來的職業所選,那么只需要一招就可以吃遍天。相信我,一生為自己感興趣的事情奮…

網絡安全:六種常見的網絡攻擊手段

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

3種團隊分組適應項目_分組團隊競賽活動方案

為營造新年春節期間良好的經營氛圍,形成規范有效的服務流程,促進員工快樂積極向上工作,鑄造峽市娛樂行業名牌,經KTV 管理人員研究制定以下分組評比競賽方案:第一:分組辦法。1、KTV主管楊海軍、華磊、馮磊、…

Spring Security(18)——Jsp標簽

目錄 1.1 authorize 1.2 authentication 1.3 accesscontrollist Spring Security也有對Jsp標簽的支持的標簽庫。其中一共定義了三個標簽:authorize、authentication和accesscontrollist。其中authentication標簽是用來代表當前Authentication對象的&…

e4a html文本,E4A?怎么將剪貼版中的文本?粘貼到窗口的光標處啊?求個代碼

滿意答案百幻蝶V木桃2017.05.20采納率:49% 等級:8已幫助:1710人■如何打開剪貼板查看器 當您從某個程序剪切或復制信息時,該信息會被移動到剪貼板并保留在那里,直到您清除剪貼板或者您剪切或復制了另一片信息。“剪…

電腦技巧:七款U盤修復軟件

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

cdrx8如何批量導出jpg_Coreldraw/CDR X8 存低版本打開問題 – 數碼打印破圖 – Coreldraw/CDR軟件崩潰 – 漸變導位圖角度變了...

Coreldraw/CDR X8 存低版本打開問題 – 數碼打印破圖 – Coreldraw/CDR軟件崩潰 – 漸變導位圖角度變了Coreldraw/CDR X8 存低版本打開問題各位大神,小弟最近安裝了Coreldraw/CDR X8 ,在設計文件時,會遇到給文字設計套白邊,問題來…