<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          中槍了吧?六種讓你的 Python 程序變慢的壞習慣

          共 3646字,需瀏覽 8分鐘

           ·

          2021-09-15 13:40

          隨著 Python 越來越流行,Python 用戶的數(shù)量也在增加。Python確實比較容易學。它也非常靈活,因此有更多可能的方法來實現(xiàn)一個功能。

          然而,只要有多種方法可以做一件特定的事情,就一定意味著每種方法都有優(yōu)點和缺點。在本文中,我收集了 6 種可能導致性能相對較差的 Python 代碼編寫典型方式。

          1.不要導入根模塊

          在使用 Python 時,我們無法避免的一件事是導入模塊,無論是內置模塊還是第三方模塊。有時,我們可能只需要該模塊中的一個或幾個函數(shù)或對象。在這種情況下,我們應該嘗試只導入我們需要的函數(shù)或對象,而不是導入根模塊。

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

          較慢的示例

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

          更快的例子

          2.避免使用點/點鏈

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

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

          較慢的示例
          更快的例子

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

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

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

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

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

          較慢的示例

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

          更快的例子

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

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

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

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

          較慢的示例
          更快的例子

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

          5.使用 If-Condition 短路

          "短路"評估存在于許多編程語言中,Python 也是如此?;旧?,它指的是某些布爾運算符的行為,其中僅當?shù)谝粋€參數(shù)不足以確定整個表達式的值時才執(zhí)行或評估第二個參數(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 因此,我們可以編寫如下代碼。
          更快的例子

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

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

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

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

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

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

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

          較慢的示例
          更快的例子

          小結

          在本文中,我列出了 6 個讓 Python 程序更快的技巧。但是,也需要密切注意,不要總是把性能放在第一位。有時,還應考慮可讀性和簡潔性。

          參考鏈接:https://towardsdatascience.com/6-bad-manners-makes-your-python-program-slower-15b6fce62927



          教你3個python「性能分析」工具,再也不用自己計算函數(shù)耗時了


          我,14歲初中生,從零開始拿到了Kaggle競賽冠軍


          實戰(zhàn)項目:基于機器學習的 Python 信用卡欺詐檢測!


          長按或掃描下方二維碼,后臺回復:加群,可申請入群。一定要備注:入群+地點+學習/公司。例如:入群+上海+復旦。


          感謝你的分享,點贊,在看  

          瀏覽 34
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九色首页| 黄色免费视频永久免费 | 大香蕉亚洲成人 | 丁香五月婷婷六月 | 东京热人人操 |