7 個實用的 pytest plugins
在 pytest 教學 一文,我們學會如何利用 pytest 更輕鬆地撰寫 Python 的測試程式,但 pytest 所提供的方便功能不僅僅如此,pytest 還有許多好用的 plugins 能夠利用,使用得當的話,將可增加開發效率。
剛好 15 amazing pytest plugins 中提到不少實用的 pytest plugins, 本文就將其中 7 項進行簡介。
在 pytest 教學 一文,我們學會如何利用 pytest 更輕鬆地撰寫 Python 的測試程式,但 pytest 所提供的方便功能不僅僅如此,pytest 還有許多好用的 plugins 能夠利用,使用得當的話,將可增加開發效率。
剛好 15 amazing pytest plugins 中提到不少實用的 pytest plugins, 本文就將其中 7 項進行簡介。
先前 用 pydantic 輕鬆進行設定管理(Settings management) 一文曾提及利用 pydantic 管理設定,但其實也可以驗證資料,本文將介紹如何透過 pydantic 驗證資料,保證有效減少開發驗證各種資料的繁瑣。
近來查閱 Python 關於 datetime 的標準日期格式(datetime.isoformat)的時候,發現一個奇妙的行為,該行為可能造成日期格式不一致。
在 Python 淺談 with 語句 一文中,我們已介紹基本的 with
語法與何謂 context manager 以及簡單的 context manager 實作。
除了該文所提供的實作方法之外,也可以利用 Python 內建的 contextlib 模組進行開發,此外該模組也提供若干實用的 context manager 可以使用。
Python 關於平行處理的模組除了 multiprocessing 與 threading 之外,其實還提供 1 個更為簡單易用的 concurrent.futures 可以使用。
該模組提供 ThreadPoolExecutor 與 ProcessPoolExecutor 2 個經過封裝的 classes ,讓人方便上手之外,也讓程式看起來更加簡潔。
個人認為是相當值得學習&使用的模組之一,可以應付絕大多數日常關於平行處理的使用場景。
本文將透過幾個範例學習 concurrent.futures
模組。
Python 其實內建許多好用的模組,如果運用得當,不僅節省開發時間,還能讓程式碼看起來更加簡潔。
itertools 就屬於內建好用的模組之一,該模組提供不少讓我們能夠方便地處理 iterable (例如 dict, list, tuple, str 等類型的資料),譬如環型走訪、分類群組(group by)、乘積(product)等等。
如果 itertools 內建的函式還不夠的話,還可以安裝 more-itertools 。 more-itertools 提供更多額外的函式可供利用。
本篇將介紹幾種 itertools/more-itertools 中簡單易用的函式,提供除了自己動手實作之外的方法,不僅能夠節省重複開發輪子的時間,也能夠讓程式看起來更加優雅、簡潔。
Python 內建的 multiprocessing 是相當重要的模組,如果有平行(parallelism)處理的需求,除了內建的 threading 模組之外,另一個就屬 multiprocessing 。
使用 multiprocessing 的好處在於能夠很大程度避開 Python GIL 對於程式效能的影響,但壞處則是對於記憶體的耗用程度也較高,即使如此也是一個必須了解的模組。
本篇將實際透過幾個範例學習如何使用 multiprocessing 模組。
開發時,不免都會需要實作設定檔,藉由設定檔簡單地改變系統的行為。例如 Debug 模式的開關、資料庫相關設定等等,都通常會放在設定檔中。
而 Python 不僅提供內建模組 configparser 能夠簡單實作設定檔之外,也可以簡單利用 class 實作設定檔,例如以下 2 個檔案就是 class 形式的設定檔範例:
# settings.py
class Settings(object):
DB_HOST = 'localhost'
DB_PORT = 8888
settings = Settings()
# test.py
from settings import settings
print(settings.DB_HOST, settings.DB_PORT)
然而,現今開發專案也經常會使用 dotenv
(例如 python-dotenv )讓設定更加方便。
除了自行開發結合 dotenv
的功能之外,其實可以選擇利用 pydantic 輕鬆地整合 class 形式的設定檔與 dotenv
。