前言
我們都知道就速度而言,Python是比Java或C慢得多的語(yǔ)言。Python是動(dòng)態(tài)類(lèi)型化的語(yǔ)言,這意味著它的變量類(lèi)型未預(yù)定義。動(dòng)態(tài)類(lèi)型是一把雙刃劍,它成就了Python成為一種優(yōu)雅的語(yǔ)言,同時(shí)也讓Python運(yùn)行速度減慢。讓我們看看一些可能對(duì)您的整體代碼性能產(chǎn)生重大影響的小技巧。
1. 了解你的內(nèi)置函數(shù)
這一技巧有助于節(jié)省您的時(shí)間和時(shí)間與您的代碼。當(dāng)我開(kāi)始學(xué)習(xí)Python的時(shí)候,我以前從不使用內(nèi)置函數(shù),所以為了完成我的絕對(duì)值代碼,我會(huì)運(yùn)行一個(gè)for循環(huán)而不是使用abs()。為了把一個(gè)字符轉(zhuǎn)換成大寫(xiě)字母,我甚至?xí)阉D(zhuǎn)換成與大寫(xiě)字母等價(jià)的ASCII字符,因?yàn)槲揖芙^學(xué)習(xí)字符串函數(shù)。
如果你對(duì)Python是認(rèn)真的,那么學(xué)習(xí)所有的Python內(nèi)置函數(shù)是值得的,因?yàn)樗粌H使你的代碼更整潔、更可重用,你還可以通過(guò)簡(jiǎn)單地使用Python提供給你的東西來(lái)避免代碼中人為的低效率。
2. A,B=B,A
我確信您以前使用過(guò)“temp”作為占位符變量來(lái)交換兩個(gè)元素。我能告訴你的是,這個(gè)方法只在課堂上使用,不應(yīng)該在編程時(shí)使用。
相反,可以通過(guò)將變量寫(xiě)成a,b = b,a 來(lái)進(jìn)行簡(jiǎn)單的變量交換。這將在一行中切換所有變量,并防止解釋器超過(guò)三個(gè)(temp, a,b交換方法)。
這是一個(gè)小小的修復(fù),可以節(jié)省幾分之一秒的時(shí)間——但從長(zhǎng)遠(yuǎn)來(lái)看,這些時(shí)間會(huì)累積起來(lái)。
3. 只在函數(shù)內(nèi)導(dǎo)入
作為一個(gè)初學(xué)者,我們都喜歡大量導(dǎo)入我們認(rèn)為在代碼頂部需要的所有東西。我記得有一次我導(dǎo)入了NumPy, Pandas, Scipy, Warnings, Math, Math, Os等等,當(dāng)我完成我的代碼時(shí),我只使用了三個(gè)庫(kù)。這會(huì)耗盡你電腦的內(nèi)存。
相反,在相應(yīng)的函數(shù)中導(dǎo)入所需的庫(kù)(如果多個(gè)函數(shù)需要相同的庫(kù),則需要多次導(dǎo)入)。這意味著解釋器只會(huì)在你調(diào)用函數(shù)時(shí)完成導(dǎo)入,而不是在代碼的開(kāi)頭。現(xiàn)在Python庫(kù)被緩存了,所以當(dāng)你調(diào)用不同的函數(shù)時(shí),它不會(huì)在每次導(dǎo)入時(shí)占用額外的時(shí)間。然而,當(dāng)您最終導(dǎo)入頂部的所有內(nèi)容,甚至不使用代碼中的一些函數(shù)時(shí),它確實(shí)會(huì)占用更多的時(shí)間。
4. 使用Numba
這是一個(gè)小眾技巧,主要幫助使用NumPy或科學(xué)編程的人。Numba是一個(gè)Python JIT編譯器,它對(duì)函數(shù)應(yīng)用裝飾器,將一些函數(shù)轉(zhuǎn)換為超快的字節(jié)代碼(幾乎與C一樣快)。Numba開(kāi)始因其簡(jiǎn)單和龐大的功能而出名。
Numba目前也支持其他功能,但是,我認(rèn)為它目前主要是為科學(xué)Python開(kāi)發(fā)人員提供的。
5. 從集合中檢查,而不是從列表中
這是Python優(yōu)化書(shū)中最古老的技巧之一。如果存在元素,不要在列表中搜索。相反,將列表設(shè)置為set(set(list)),然后執(zhí)行檢查“element in set(list)”。這個(gè)小小的改變將提高您的運(yùn)行時(shí)效率,因?yàn)镻ython使用了可調(diào)整大小的哈希表,將平均時(shí)間復(fù)雜度提高到了O(1)。
然而,遍歷集合并不比遍歷列表快。
責(zé)編AJX
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4333瀏覽量
62696 -
源代碼
+關(guān)注
關(guān)注
96文章
2945瀏覽量
66778 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84756
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論