1、 lru_cache
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、東營(yíng)網(wǎng)絡(luò)推廣、成都小程序開發(fā)、東營(yíng)網(wǎng)絡(luò)營(yíng)銷、東營(yíng)企業(yè)策劃、東營(yíng)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供東營(yíng)建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
這個(gè)裝飾器來自functools模塊。該模塊包含在標(biāo)準(zhǔn)庫(kù)中,非常易于使用。它還包含比這個(gè)裝飾器更酷的功能,但這個(gè)裝飾器是非常受人喜歡的。此裝飾器可用于使用緩存加速函數(shù)的連續(xù)運(yùn)行。當(dāng)然,這應(yīng)該在使用時(shí)記住一些關(guān)于緩存的注意事項(xiàng),但在通用使用情況下,大多數(shù)時(shí)候這個(gè)裝飾器都是值得使用的。
2、JIT
JIT是即時(shí)編譯的縮寫。通常每當(dāng)我們?cè)赑ython中運(yùn)行一些代碼時(shí),發(fā)生的第一件事就是編譯。這種編譯會(huì)產(chǎn)生一些開銷,因?yàn)轭愋捅环峙淞藘?nèi)存,并存儲(chǔ)為未分配但已命名的別名,使用即時(shí)編譯,我們?cè)趫?zhí)行時(shí)才進(jìn)行編譯。
在很多方面,我們可以將其視為類似于并行計(jì)算的東西,其中Python解釋器同時(shí)處理兩件事以節(jié)省時(shí)間。Numba JTI編譯器因?qū)⑦@一概念提到Python中而聞名,可以非常輕松地調(diào)用此裝飾器,并立即提高代碼的性能。Numba包提供了JIT裝飾器,它使運(yùn)行更密集的軟件變得更加容易,而不必進(jìn)入C。
3、do_twice
do_twice裝飾器的功能與它的名字差不多。此裝飾器可用于通過一次調(diào)用運(yùn)行兩次函數(shù),對(duì)調(diào)試特別有用。它可以用于測(cè)量?jī)蓚€(gè)不同迭代的功能。
4、count_calls
count_calls裝飾器可用于提供有關(guān)函數(shù)在軟件中使用多少次的信息。與do_twice一樣,對(duì)調(diào)試也特別有用。
5、dataclass
為了節(jié)省編寫類的時(shí)間,推薦使用dataclass裝飾器。這個(gè)裝飾器可用于快速編寫類中常見的標(biāo)準(zhǔn)方法,這些方法通常會(huì)在我們編寫的類中找到。
6、singleton
singleton是一個(gè)單例裝飾器。通常,單例裝飾器是由用戶自己編寫的,實(shí)際上并不是導(dǎo)入的。
7、use_unit
在科學(xué)計(jì)算中經(jīng)常派上用場(chǎng)的一種裝飾器是use_unit裝飾器。此裝飾器可用于更改返回結(jié)果的表示單位。這對(duì)于那些不想在數(shù)據(jù)中添加度量單位但仍希望人們知道這些單位是什么的人很有用。這個(gè)裝飾器可不是在任何模塊中真正有用,但它是非常常見的,對(duì)科學(xué)應(yīng)用程序非常有用。
不同的編程語言,會(huì)有不同 的緩存策略,例如,通過哈希映射、優(yōu)先級(jí)隊(duì)列等實(shí)現(xiàn)緩存。因此,不同的編程語言,在緩存的解決方案方面具有很大差異,可能需要幾分鐘,也可能需要幾小時(shí)。
但是,在Python中,標(biāo)準(zhǔn)工具包functools實(shí)現(xiàn)了一種名為L(zhǎng)RU(Least Recently Used)的緩存策略,可以通過傳入?yún)?shù),來設(shè)定緩存最近多少次的計(jì)算結(jié)果,如果傳入?yún)?shù)為None,那么則不緩存。
一:學(xué)會(huì)正確使用numpy scipy。 numpy scipy寫好的絕不自己寫,比如矩陣運(yùn)算等操作,pylab的實(shí)現(xiàn)還算不錯(cuò)。各種函數(shù)都有,盡量使用他們可以避免初學(xué)者大部分的速度不足問題。因?yàn)檫@些函數(shù)大部分都是預(yù)編譯好的。
根據(jù)我?guī)啄昵暗臏y(cè)試,python的矩陣運(yùn)算速度并不慢,(因?yàn)槟氵\(yùn)行的是動(dòng)態(tài)鏈接庫(kù)里面的函數(shù)而不是腳本)比mathematica快,和matlab持平。
大部分新手不擅長(zhǎng)看文檔啥都自己造輪子是不好的。當(dāng)然老手把效率寫的比開源庫(kù)高也不算啥新聞,畢竟有對(duì)特定程序的優(yōu)化
二:減少for的使用,多使用向量化函數(shù),np.vectorlize可以把函數(shù)變成對(duì)數(shù)組逐元素的操作,比for效率高幾個(gè)華萊士。
三:對(duì)內(nèi)存友好,操作大矩陣的時(shí)候減少會(huì)引起整矩陣對(duì)此copy的操作
四:系統(tǒng)最慢的大部分時(shí)候是io,包括上面說的內(nèi)存操作和頻繁的讀入讀出以及debug輸出。避免他們,在需要實(shí)時(shí)處理的時(shí)候引入類似于gpu的pipeline管線機(jī)制或者使用靈活的多線程編程可以起到奇效。
五:matplotlib的繪圖效率并不高明,在使用交互繪圖(plt.ion)的時(shí)候減少不必要的刷新率。
1. Pandas.apply() – 特征工程瑰寶
Pandas 庫(kù)已經(jīng)非常優(yōu)化了,但是大部分人都沒有發(fā)揮它的最大作用。想想它一般會(huì)用于數(shù)據(jù)科學(xué)項(xiàng)目中的哪些地方。一般首先能想到的就是特征工程,即用已有特征創(chuàng)造新特征。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函數(shù)。
在Pandas.apply()中,可以傳遞用戶定義功能并將其應(yīng)用到Pandas Series的所有數(shù)據(jù)點(diǎn)中。這個(gè)函數(shù)是Pandas庫(kù)最好的擴(kuò)展功能之一,它能根據(jù)所需條件分隔數(shù)據(jù)。之后便能將其有效應(yīng)用到數(shù)據(jù)處理任務(wù)中。
2. Pandas.DataFrame.loc – Python數(shù)據(jù)操作絕妙技巧
所有和數(shù)據(jù)處理打交道的數(shù)據(jù)科學(xué)家(差不多所有人了!)都應(yīng)該學(xué)會(huì)這個(gè)方法。
很多時(shí)候,數(shù)據(jù)科學(xué)家需要根據(jù)一些條件更新數(shù)據(jù)集中某列的某些值。Pandas.DataFrame.loc就是此類問題最優(yōu)的解決方法。
3. Python函數(shù)向量化
另一種解決緩慢循環(huán)的方法就是將函數(shù)向量化。這意味著新建函數(shù)會(huì)應(yīng)用于輸入列表,并返回結(jié)果數(shù)組。在Python中使用向量化能至少迭代兩次,從而加速計(jì)算。
事實(shí)上,這樣不僅能加速代碼運(yùn)算,還能讓代碼更加簡(jiǎn)潔清晰。
4. Python多重處理
多重處理能使系統(tǒng)同時(shí)支持一個(gè)以上的處理器。
此處將數(shù)據(jù)處理分成多個(gè)任務(wù),讓它們各自獨(dú)立運(yùn)行。處理龐大的數(shù)據(jù)集時(shí),即使是apply函數(shù)也顯得有些遲緩。
關(guān)于優(yōu)化Python編程的4個(gè)妙招,青藤小編就和您分享到這里了。如果您對(duì)python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關(guān)于python編程的技巧及素材等內(nèi)容,可以點(diǎn)擊本站的其他文章進(jìn)行學(xué)習(xí)。
Python比較常見的庫(kù)有:Arrow、Behold、Click、Numba、Matlibplot、Pillow等:
1、Arrow
Python中處理時(shí)間的庫(kù)有datetime,但是它過于簡(jiǎn)單,使用起來不夠方便和智能,而Arrow可以說非常的方便和智能。它可以輕松地定位幾個(gè)小時(shí)之前的時(shí)間,可以輕松轉(zhuǎn)換時(shí)區(qū)時(shí)間,對(duì)于一個(gè)小時(shí)前,2個(gè)小時(shí)之內(nèi)這樣人性化的信息也能夠準(zhǔn)確解讀。
2、Behold
調(diào)試程序是每個(gè)程序員必備的技能,對(duì)于腳本語言,很多人習(xí)慣于使用print進(jìn)行調(diào)試,然而對(duì)于大項(xiàng)目來說,print的功能還遠(yuǎn)遠(yuǎn)不足,我們希望有一個(gè)可以輕松使用,調(diào)試方便,對(duì)變量監(jiān)視完整,格式已于查看的工具,而Behold就是那個(gè)非常好用的調(diào)試庫(kù)。
3、Click
現(xiàn)在幾乎所有的框架都有自己的命令行腳手架,Python也不例外,那么如何快速開發(fā)出屬于自己的命令行程序呢?答案就是使用Python的Click庫(kù)。Click庫(kù)對(duì)命令行api進(jìn)行了大量封裝,你可以輕松開發(fā)出屬于自己的CLI命令集。終端的顏色,環(huán)境變量信息,通過Click都可以輕松進(jìn)行獲取和改變。
4、Numba
如果你從事數(shù)學(xué)方面的分析和計(jì)算,那么Numba一定是你必不可少的庫(kù)。Numpy通過將高速C庫(kù)包裝在Python接口中來工作,而Cython使用可選的類型將Python編譯為C以提高性能。但是Numba無疑是最方便的,因?yàn)樗试S使用裝飾器選擇性地加速Python函數(shù)。
5、Matlibplot
做過數(shù)據(jù)分析,數(shù)據(jù)可視化的數(shù)學(xué)學(xué)生一定知道m(xù)atlab這個(gè)軟件,這是一個(gè)收費(fèi)的數(shù)學(xué)商用軟件,在Python中,Matlibplot就是為了實(shí)現(xiàn)這個(gè)軟件中功能開發(fā)的第三方Python庫(kù)。并且它完全是免費(fèi)的,很多學(xué)校都是用它來進(jìn)行數(shù)學(xué)教學(xué)和研究的。
6、Pillow
圖像處理是任何時(shí)候我們都需要關(guān)注的問題,平時(shí)我們看到很多ps中的神技,比如調(diào)整畫面顏色,飽和度,調(diào)整圖像尺寸,裁剪圖像等等,這些其實(shí)都可以通過Python簡(jiǎn)單完成,而其中我們需要使用的庫(kù)就是Pillow。
7、pyqt5
Python是可以開發(fā)圖形界面程序的。而pyqt就是一款非常好用的第三方GUI庫(kù),有了它,你可以輕松開發(fā)出跨平臺(tái)的圖形應(yīng)用程序,其中qtdesigner設(shè)計(jì)器,更是加速了我們開發(fā)圖形界面的速度。
除了上述介紹的之外,Python還有很多庫(kù),比如:Pandas、NumPy、SciPy、Seaborn、Keras等。
只需要在函數(shù)前使用單獨(dú)一行,加
@jit
但并不是所有的函數(shù)都有效,主要是針對(duì)以python代碼進(jìn)行數(shù)學(xué)計(jì)算為主的函數(shù)。