自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

刷新認知!這六種讓 Python 程序變慢的壞習(xí)慣我一直在用!

開發(fā) 前端
我們知道 Python 是一門非常流行的開發(fā)語言,它語言簡潔并且容易學(xué)習(xí),一個功能可能有多種實現(xiàn)方式。只要有多種方法做一件特定的事情,那就意味著每種方法都性能的差異。

在本文中,我總結(jié)了 6 種 Python 編寫方式案例。

1.不要導(dǎo)入根模塊

在使用 Python 時,我們無法避免的一件事是導(dǎo)入模塊,無論是內(nèi)置模塊還是第三方模塊。有時,我們可能只需要該模塊中的一個或幾個函數(shù)或?qū)ο?。在這種情況下,我們應(yīng)該嘗試只導(dǎo)入我們需要的函數(shù)或?qū)ο螅皇菍?dǎo)入根模塊。

這是一個簡單的例子。假設(shè)我們需要計算程序中某些數(shù)字的平方根。

較慢的示例

在不好的例子中,我們導(dǎo)入了 math 模塊,并使用 math.sqrt() 來訪問該函數(shù)。當(dāng)然,它沒有任何問題,但如果我們可以導(dǎo)入 sqrt() 函數(shù),性能會更好。

更快的例子

2.避免使用點/點鏈

使用 dot 非常直觀。在 Python 中訪問對象的屬性或函數(shù)。大多數(shù)時候,沒有問題。但是,如果我們可以避免使用點甚至鏈接點,性能實際上會更好。

下面的示例顯示將數(shù)字附加到列表中,然后將其刪除。

較慢的示例

更快的例子

如果你不相信這實際上做同樣的事情,我們可以驗證它。

我可以預(yù)料到許多 Python 開發(fā)人員會跳出來說這個例子中的技術(shù)有點荒謬。事實上,即使是我自己,我也很少像上面那樣寫代碼。然而,很高興知道我們可以這樣編程,甚至可以讓它更快。

如果我們想附加到一個列表并從中刪除數(shù)百萬次的項目,我們可能應(yīng)該考慮使用這個技巧。這就是為什么我們需要平衡代碼的性能和可讀性。

3.不要使用 + 連接字符串

字符串在 Python 中是不可變的。因此,當(dāng)我們使用"+"將多個字符串連接成一個長字符串時,每個子字符串都是單獨操作的。

較慢的示例

具體來說,對于每個子字符串,它需要請求一個內(nèi)存地址,然后將它與該內(nèi)存地址中的原始字符串連接起來,這成為一種開銷。

更快的例子

但是,當(dāng)我們使用 join() 函數(shù)時,該函數(shù)事先知道所有子字符串,并且內(nèi)存地址分配的長度適合最終連接的字符串。因此,沒有為每個子串分配內(nèi)存的開銷。

強烈建議盡可能使用 join() 函數(shù)。但是,有時我們可能只想連接兩個字符串?;蛘?,只是為了方便起見,我們想使用“+”。在這些情況下,使用“+”號會帶來更好的可讀性和更少的代碼長度。

4.不要使用臨時變量進行價值交換

許多算法需要兩個變量的值交換。在大多數(shù)其他編程語言中,這通常是通過引入一個臨時變量來完成的,如下所示。

較慢的示例

更快的例子

但是,在 Python 中,我們不必使用 temp 變量。Python 具有內(nèi)置語法來實現(xiàn)此值交換,如下所示。

5.使用 If-Condition 短路

"短路"評估存在于許多編程語言中,Python 也是如此。基本上,它指的是某些布爾運算符的行為,其中僅當(dāng)?shù)谝粋€參數(shù)不足以確定整個表達式的值時才執(zhí)行或評估第二個參數(shù)。

讓我們在一個例子中演示這一點。假設(shè)我們有一個列表如下。

my_dict = [
{
'name': 'Alice',
'age': 28
},
{
'name': 'Bob',
'age': 23
},
{
'name': 'Chris',
'age': 33
},
{
'name': 'Chelsea',
'age': 2
},
{
'name': 'Carol',
'age': 24
}
]

我們的工作是對列表進行過濾,找出所有名字以"C"開頭,年齡大于等于30歲的人。

較慢的示例

有兩個條件都需要同時滿足:

  • 名稱以"C"開頭
  • 年齡≥30 因此,我們可以編寫如下代碼。

更快的例子

前面例子中的代碼沒有任何問題。但是,在這個特殊的虛構(gòu)示例中,只有"Chris"的年齡在 30 歲以上。

如果我們先寫出檢查名字的條件,那么滿足三個名字(Chris、Chelsea 和 Carol)。然后,將針對所有這 3 個人再次檢查有關(guān)年齡的第二個條件。

但是,因為短路評估,如果我們先寫年齡條件,只有 Chris 的年齡在30歲以上,并且會再次檢查他的名字是否以"C"開頭。

在這種情況下,它幾乎快了100%。

6.如果可以使用For循環(huán)就不要使用While循環(huán)

Python 使用了很多 C 來提高性能,即 CPython。在循環(huán)語句方面,Python 中的 For-Loop 具有相對較少的步驟,其中更多的步驟作為 C 代碼運行,而不是 While-Loop。

因此,當(dāng)我們可以在 Python 中使用 For-Loop 時,我們不應(yīng)該使用 while 循環(huán)。這不僅是因為 For-Loop 在 Python 中更優(yōu)雅,而且性能更好。

較慢的示例

更快的例子

責(zé)任編輯:華軒 來源: Python學(xué)習(xí)與數(shù)據(jù)挖掘
相關(guān)推薦

2019-11-28 18:51:07

PythonPHP編程語言

2019-12-03 13:16:55

PHP流封裝協(xié)議

2025-01-02 08:21:32

2012-05-22 00:16:47

2009-07-21 14:32:02

IT人習(xí)慣

2012-05-18 00:01:07

JVMJavaJVM平臺

2021-11-01 22:39:14

程序員專業(yè)技術(shù)

2011-05-30 14:50:56

程序員

2022-07-13 17:47:54

布局Flex代碼

2023-05-10 13:58:13

服務(wù)限流系統(tǒng)

2022-04-12 08:46:30

for 循環(huán)遍歷字符串

2014-12-11 13:41:32

2024-11-08 09:37:10

C#組件

2021-11-29 18:34:14

內(nèi)存異步死循環(huán)

2018-01-11 13:57:36

程序員技能開發(fā)者

2013-01-22 11:57:29

IT工作者加班

2009-05-21 09:28:05

阿里巴巴馬云忽悠

2020-06-24 08:26:10

編程語言Perl技術(shù)

2022-09-26 08:30:41

黑客網(wǎng)絡(luò)攻擊隱私

2024-01-07 13:25:32

Go編程代碼
點贊
收藏

51CTO技術(shù)棧公眾號