天天看點

這七個100%提高Python代碼性能的技巧,一定要知道相關閱讀1. 優化代碼性能和速度的技巧2. 使用進階功能,如裝飾器、生成器和元類3.調試和處理錯誤的一些技巧4. 編寫幹淨易讀代碼的技巧5. 使用進階資料結構,如集合、字典和元組6. 使用大資料集和記憶體管理的技巧7. 處理字元串、數字和其他資料類型的技術

這七個100%提高Python代碼性能的技巧,一定要知道相關閱讀1. 優化代碼性能和速度的技巧2. 使用進階功能,如裝飾器、生成器和元類3.調試和處理錯誤的一些技巧4. 編寫幹淨易讀代碼的技巧5. 使用進階資料結構,如集合、字典和元組6. 使用大資料集和記憶體管理的技巧7. 處理字元串、數字和其他資料類型的技術

B站|公衆号:啥都會一點的研究所學生

相關閱讀

整理了幾個100%會踩的Python細節坑,提前防止腦血栓

整理了十個100%提高效率的Python程式設計技巧,更上一層樓

Python-清單,從基礎到進階用法大總結,進來查漏補缺

Python-元組,從基礎到進階用法大總結及與清單核心差別,進來查漏補缺

Python-字典,從基礎到進階用法大總結,進來查漏補缺

Python-集合,從基礎到進階大總結,進來查漏補缺

這些包括我在内都有的Python程式設計陋習,趁早改掉

Python可變類型的坑,不要再踩了

清單推導式,Python中最好的特性?可讀性?

元組啊,不就是不可變的清單嗎?

訂閱專欄 ===> Python

由于網際網路上充斥着許多Python資源,反而使得部分人不知道從哪下手或者從哪提高,我總結整理了使用頻率較高的Python程式設計技巧,旨在幫助自己及各位更上一個台階

1. 優化代碼性能和速度的技巧

  • 使用内置函數和庫:Python 有很多高度優化的内置函數和庫,可以節省大量時間和資源;
  • 避免使用全局變量:全局變量可以從程式中的任何位置通路,可能會降低代碼速度,是以盡可能使用局部變量;
  • 使用清單推導式:這個在我之前的教程中也常說到,清單推導式比 for 循環更快,更簡潔,并且用更少的代碼行執行相同的操作;
  • 避免使用遞歸:遞歸函數可能會減慢代碼速度,因為會占用大量記憶體;
  • 使用 NumPy 和 SciPy:這倆可以大大幫助優化用于科學和數學計算的代碼;
  • 使用Cython來加速代碼的關鍵部分,可以編譯成C,使得速度更快;
  • 在執行計算時使用“矢量化操作”和“廣播”;
  • 使用多程序、多線程或異步來利用多個 CPU同時運作多個任務;

2. 使用進階功能,如裝飾器、生成器和元類

  • 裝飾器:裝飾器是一種修改函數或類行為的方法。 通常用于在不更改底層代碼的情況下添加功能,例如日志記錄或記憶(老八股了);
  • 生成器:生成器是一種在 Python 中建立疊代器的方法。 允許疊代大型資料集而無需将整個資料集加載到記憶體中,對于讀取大檔案或處理大量資料等任務很有幫助
  • 元類:元類是一種建立可用于建立其他類的類的方法。 可用于為類定義自定義行為,例如添加方法或屬性。還可以用于建立元程式設計,允許編寫生成其他代碼的代碼;

    協程:協程是一種在Python中建立并發和異步代碼的方法。允許同時執行多個任務,并且它們可用于建立簡單、輕量級的線程;

  • 函數注解:函數注解是一種為函數添加中繼資料的方式,可以用來提供函數參數、傳回值和類型的更多資訊,也可以用來指定函數參數和傳回值的類型;
  • 上下文管理器:上下文管理器是一種以安全高效的方式處理資源(常用的如檔案)的方法。允許定義使用資源的上下文,并自動處理資源的打開和關閉;
  • 枚舉:枚舉是一種定義一組命名值的方法,可以用作整數和字元串的替換。使用 Enum 類建立;
  • Namedtuples:Namedtuples是具有命名字段的元組的子類,可以通過名稱而不是索引來通路字段。使用namedtuple函數建立

3.調試和處理錯誤的一些技巧

  • 使用内置的 Python 調試器 (pdb):内置的 Python 調試器是一個強大的工具,允許逐行調試代碼、檢查變量和設定斷點;
  • 使用 print 語句(也是我很多場景下喜歡用的哈哈哈):将 print 語句添加到代碼,通過提供程式執行流程和變量值的列印來幫助确定問題的根源;
  • 使用 linter:linter 是一種檢查代碼是否存在文法錯誤和潛在錯誤的工具。可以在運作代碼之前捕獲錯誤;
  • 使用單元測試架構:單元測試允許單獨測試一小段代碼,進而更容易查明錯誤的來源;
  • 使用日志庫:日志庫記錄有關程式執行的資訊,例如變量值和執行流程。 對于跟蹤不常發生的錯誤或了解程式随時間變化的行為很有用;
  • 使用try-except塊:Try-except 塊通過捕獲錯誤并提供替代執行流程來優雅地處理錯誤,可以幫助編寫健壯且容錯的代碼;
  • 使用assert語句:assert 語句檢查給定條件是否為真,如果為假則引發異常。用于檢查輸入的完整性并可用作調試輔助工具;
  • 使用日志子產品:日志子產品記錄不同級别的消息,可用于記錄調試、資訊、警告、錯誤和關鍵消息;
  • 使用traceback子產品:traceback 子產品提取異常的堆棧跟蹤,對于了解錯誤原因和定位代碼中的故障點很有用;
  • 使用錯誤跟蹤系統:錯誤跟蹤系統記錄、跟蹤和管理錯誤,并跟蹤錯誤修複的進度;

4. 編寫幹淨易讀代碼的技巧

  • 使用有意義的變量和函數名稱:為變量和函數使用準确反映其用途和用途的清晰、描述性名稱(這個太重要了,上學期間總喜歡亂寫)
  • 使用空格和縮進:一緻地使用空格和縮進來分隔代碼塊并使代碼結構清晰;
  • 使用注釋:使用注釋來解釋代碼的目的和代碼中任何不清晰的部分;
  • 保持單行簡短:将代碼行的長度限制在 80 個字元左右
  • 使用統一的命名約定:例如變量名使用 snake_case,類名使用 CamelCase。
  • 保持函數體小且專注于某個任務:使得更容易重用和更容易了解,著名的就是main函數寫了成百上千行
  • 使用文檔字元串(docstrings):記錄目的、參數、傳回函數和類的值;
  • 遵循 PEP-8 風格指南:該指南提供了編寫幹淨可讀的 Python 代碼指南。涵蓋縮進、命名約定和空格等。遵循這些準則将使代碼更加一緻并且更易于他人閱讀;

5. 使用進階資料結構,如集合、字典和元組

Python 提供了多種進階資料結構,可用于以強大而高效的方式存儲和操作資料。 這些資料結構包括集合、字典和元組。

  • 集合:集合是唯一進制素的無序集合。 集合通常用于成員測試、從清單中删除重複項以及交集和并集等數學運算。 使用大括号 {} 或 set() 構造函數定義。 例如 my_set = {1, 2, 3, 4}
  • 字典:字典是鍵值對的無序集合。字典通常用于查找、計數和排序。 使用花括号 {} 定義,鍵和值由冒号分隔。 例如 my_dict = {‘geeks’: 1, ‘for’: 2, ‘geeks’: 3}
  • 元組:元組是元素的有序集合。 元組類似于清單,但它是不可變的,意味着它們的元素一旦建立就無法修改。 使用括号 () 或 tuple() 構造函數定義。 例如 my_tuple = (1, 2, 3, 4)

這些資料結構可以以多種方式使用來解決不同問題。 例如,可以使用集合來快速檢查某個元素是否已存在于資料集中,使用字典來高效地存儲和檢索資料,使用元組将多個值組合在一起并将它們用作單個實體。

重要的是,每種資料結構都有自己的優缺點,為特定任務選擇正确的資料結構可以大大提高代碼的性能和可讀性,這哥仨在之前發的文章中都有總結

6. 使用大資料集和記憶體管理的技巧

處理大型資料集是一項具有挑戰性的任務,需要适當的記憶體管理以避免記憶體不足,并確定代碼高效運作。 以下是處理大型資料集和管理記憶體的一些技巧:

  • 使用記憶體高效的資料結構:例如,使用記憶體效率更高的 NumPy,而不是使用 Python 的内置清單資料結構;
  • 使用資料采樣:在處理大型資料集時,首先處理較小的資料子集通常很有用。 使用随機采樣等技術來完成,有助于減少加載和處理資料所需的記憶體量;
  • 使用延遲加載:延遲加載是一種僅在需要時将資料加載到記憶體中的技術,而不是一次加載整個資料集;
  • 使用疊代器和生成器:疊代器和生成器是一種處理大型資料集的方法,無需立即将整個資料集加載到記憶體中,允許一次處理一個資料;
  • 使用基于磁盤的存儲:當處理無法放入記憶體的大型資料集時,将資料存儲在磁盤上通常很有用, HDF5 和 Parquet 等熱門庫允許将大型資料集存儲在磁盤上并以記憶體高效的方式通路;
  • 監控記憶體使用情況:定期監控程式的記憶體使用情況可以幫助識别和修複記憶體洩漏,并優化程式的記憶體使用情況。 Python 提供了 memory_profiler 和 psutil 等庫來監控記憶體使用情況;

7. 處理字元串、數字和其他資料類型的技術

  • 字元串格式化:Python 使用 format() 方法和 f-strings 提供進階字元串格式化技術。 允許将動态值插入字元串并使它們更具可讀性。 例如,使用“My name is {}”.format(“John”) 将值“John”插入到字元串中;
  • 正規表達式:Python 提供了一個名為 re 的子產品使用正規表達式。 正規表達式是搜尋、比對和操作字元串的強大工具;
  • 字元串方法:Python 提供了多種可用于操作字元串的字元串方法。包括但不限于 .strip() 從字元串的開頭和結尾删除空格, .split() 将字元串拆分為子字元串清單,以及 .replace() 将特定子字元串替換;
  • 數字格式化:Python 同樣使用 format() 方法和 f-strings 提供進階數字格式化技術,類似于對字元串執行的操作,可以控制小數位數、千位分隔符的存在以及其他格式設定選項;
  • 類型轉換:Python 提供了 int()、float() 和 str() 等函數,可用于将一種資料類型轉換為另一種資料類型。 這在處理不同類型的資料時非常有用;
  • 小數精度:Python 的 decimal 子產品提供了一個 Decimal 類,可以用來進行高精度的小數運算。 對于浮點數精度可能不夠的金融和貨币計算很有幫助;
  • 進階數學運算:Python 提供了一個數學子產品,該子產品提供進階數學函數,例如三角函數、對數、指數等。 又得提到NumPy, 該庫也提供了這些操作的高效實作,例如矩陣操作等。

以上就是目前整理的提高Python程式設計水準的技巧,有任何錯誤歡迎指出,期待與你們共成長~

歡迎關注公衆号【啥都會一點的研究所學生】,更多動向與幹貨第一時間發在此處

我是啥都生,下期再見!