首頁 > 軟體

Python程式碼加速的10個最佳實用技巧_迴圈

2021-04-13 02:01:01

原標題:Python程式碼加速的10個最佳實用技巧

如果有人問你 ——「現在世界上增長最快的程式語言是什麼?」答案很簡單。那就是 Python。由於其簡單的語法和豐富的庫,它在世界範圍內受到歡迎。現在,你幾乎可以用python做任何事情:資料科學、機器學習、訊號處理、資料視覺化——你能想到的都可以。然而,許多人聲稱Python在解決嚴重問題時有點慢。但是,執行程式的時間取決於編寫的程式碼。通過一些提示和技巧,可以加速Python程式碼並提高程式的效能。

加速Python程式碼的提示和技巧

如果您正在尋找提高python程式碼速度的方法,這篇文章很適合您。闡述了減少程式執行時間的技術和策略。這些技巧不僅可以加快程式碼的速度,還可以提高Python技能。

1、使用內建庫和函數

Python有大量的庫函數和模組。它們是由專業的開發人員編寫的,並經過了多次測試。因此,這些函數是非常高效的,並有助於加速程式碼——如果函數在庫中已經可用,則不需要編寫程式碼。在這方面,我們舉一個簡單的例子。

#code1

newlist = []

forword inoldlist:

newlist.append(word.upper)

#code2

newlist = map(str.upper, oldlist)

在這裡,第二段程式碼比第一段程式碼快,因為使用了庫函數map。這些函數對初學者來說很方便。誰不想編寫更快、更簡潔、更小的程式碼呢?因此,儘可能多地使用庫函數和模組。

2、正確的資料結構在正確的位置

使用適當的資料結構將減少執行時。在開始之前,您必須考慮將在程式碼中使用的資料結構。一個完美的資料結構會加快python程式碼的速度,而其他人會把它搞砸。你必須瞭解不同資料結構的時間複雜性。

Python有內建的資料結構,如列表(list)、元組(tuple)、set和字典(dictionary)。人們習慣於使用列表。但在某些情況下,元組或字典比列表工作得好得多。

3、儘量減少使用for迴圈

很難避免使用for迴圈。但專家說,只要你有機會預防,你就會去做。For迴圈在python中是動態的。它的執行時間比while迴圈要長。巢狀的for迴圈更耗時。兩個巢狀的for迴圈將在一個for迴圈中佔用時間的平方。

#code1

fori inbig_it:

m = re.search( r'd{2}-d{2}-d{4}', i)

ifm:

...

#code2

date_regex = re.compile( r'd{2}-d{2}-d{4}')

fori inbig_it:

m = date_regex.search(i)

ifm:

...

在這種情況下,最好使用合適的替代品。此外,如果不可避免要使用for迴圈,則將計算移出迴圈。這樣可以節省很多時間。我們可以從上面的例子中看到這一點。在這裡,第二個程式碼比第一個程式碼快,因為計算是在迴圈之外完成的。

4、避免使用全域性變數

在許多情況下,python都使用全域性變數。全域性關鍵字用於宣告它。但是這些變數的執行時間要比區域性變數的執行時間長。使用更少的記憶體可以避免不必要的記憶體使用。此外,Python抓取區域性變數比抓取全域性變數更快。當導航外部變數時,Python確實是緩慢的。

其他幾種程式語言反對計劃外使用全域性變數。計數器是由於副作用導致更高的執行時。因此,儘可能使用區域性變數而不是全域性變數。此外,您可以在迴圈中使用它之前製作一個本地副本,從而節省時間。

5、增加列表推導式(List Comprehension)的使用

列表推導式(List Comprehension)提供了更短的語法。當基於現有列表建立新列表時,這種情況很少。在任何程式碼中迴圈都是必須的。有時,迴圈中的語法變得很大。在這種情況下,可以使用列表推導式。我們可以舉個例子來更準確地理解它。

#code1

square_numbers = []

forn inrange( 0, 20):

ifn % 2== 1:

square_numbers.append(n** 2)

#code2

square_numbers = [n** 2forn inrange( 1, 20) ifn% 2== 1]

在這裡,第二個程式碼比第一個程式碼花費的時間少。列表理解的方法更短,更精確。在小程式碼中可能不會有太大區別。但在大規模開發中,它可以為您節省一些時間。所以,只要你有機會加速你的Python程式碼,就使用列表理解。

6、用xrange替換range

用xrange替換range如果你使用python 2, range和xrange的問題就來了。這些函數用於在for迴圈中迭代任何內容。對於range,它將範圍內的所有數位儲存在記憶體中。但是xrange只儲存需要顯示的數位範圍。

range的返回型別是一個列表,xrange的返回型別是一個物件。最終,xrange佔用的記憶體更少,因此時間也更少。因此,儘可能使用xrange而不是range。當然,這隻適用於Python 2使用者。

7、使用生成器(Generators)

在Python中,生成器是在呼叫關鍵字yield時返回迭代器的函數。生成器是優秀的記憶體優化器。它們每次只返回一個項,而不是一次返回所有項。如果列表中包含大量資料,而您需要一次使用一個資料,那麼使用生成器。

生成器以塊計算資料。因此,函數可以在被呼叫時返回結果並保留其狀態。生成器通過在呼叫者生成值後停止程式碼來儲存函數狀態,並在請求時從停止的地方繼續執行。

由於生成器存取並計算按需值,因此很大一部分資料不需要完全儲存在記憶體中。它會節省相當多的記憶體,最終加快程式碼的速度。

8、用Join連線字串

串接在處理字串時非常常見。通常,在python中,我們使用' + '進行連線。但是,在每個步驟中,「+」操作建立一個新的字串並複製舊的材料。這個過程效率很低,而且花費很多時間。如果我們想要加快Python程式碼的速度,我們必須使用join來連線字串。

#code1

x = "I"+ "am"+ "a"+ "python"+ "linuxmi.com"

print(x)

#code2

x = " ".join([ "I", "am", "a", "python", "linuxmi.com"])

print(x)

如果我們看一下這個例子,第一個程式碼列印的是「Iamapythonlinuxmi.com」,第二個程式碼列印的是「I am a python linuxmi.com」。join操作比' + '更高效、更快。它還能保持程式碼整潔。誰不想要更快更乾淨的程式碼呢?因此,嘗試使用join而不是' + '來連線字串。

9、分析您的程式碼

程式碼分析是優化程式碼的經典方法。有許多模組來測量程式的統計資料。這讓我們知道程式在哪裡花費了太多時間,以及如何優化它。所以,為了保證優化,進行一些測試,並增強程式,提高效果。

計時器是剖析器之一。您可以在程式碼的任何地方使用它,並找到每個階段的執行時。然後我們可以改進花費太長時間的程式。此外,還有一個內建的分析器模組叫做LineProfiler。它還提供了一份關於所消耗時間的描述性報告。

10、保持更新-使用最新版本的Python

有成千上萬的開發人員定期向python新增更多的特性。我們今天使用的模組和圖書館功能將在明天的發展中過時。Python開發人員正在使這門語言變得越來越快、越來越可靠。每個新版本都提高了它的效能。

因此,我們需要將庫更新到最新版本。Python 3.9現在是最新版本。python 2的許多庫可能不能在Python3上執行。讓我們記住這一點,並始終使用最新版本來獲得最佳效能。

最後,個人見解

Python開發人員的價值正在與日俱增。那麼,你還在等什麼呢!現在是您開始學習加快Python程式碼的時候了。我們提供的提示和技巧肯定會幫助您編寫高效的程式碼。如果你遵循它們,我們希望你可以改進你的程式碼,學習更高階的Python知識。

我們試圖展示加速程式碼所需的所有主要技巧和提示。我們希望這篇文章已經回答了您的大部分問題。現在,剩下的就看你了。然而,知識沒有止境,學習也沒有止境。所以,如果我們錯過了什麼重要的東西,請告訴我們。祝學習快樂!返回搜狐,檢視更多

責任編輯:


IT145.com E-mail:sddin#qq.com