2022 年現(xiàn)代 Python 編程的 4 個關(guān)鍵點
作為一個誕生已有 30 余年的編程語言,Python 的流行度在近幾年迎來了爆炸性的增長。為了方便大家能夠更好的采用 Python,利用該語言中所有新的和強大的功能;InfoWorld 歸納總結(jié)了開發(fā)人員在 2022 年編寫現(xiàn)代 Python 時所需要理解的一些關(guān)鍵概念。
總共四個方面,具體如下:
1、Python 中的類型提示
Python 最近引入的類型提示語法允許 linter 和第三方代碼質(zhì)量工具在運行前分析你的代碼,并在檢測出可能發(fā)生的錯誤。你創(chuàng)建的 Python 代碼與他人共享的次數(shù)越多,大家就越有可能從使用類型提示中受益。
Python 的每個后續(xù)版本都推出了更復雜、更強大的類型注解。如果你養(yǎng)成了在短期內(nèi)學習如何使用類型注解的習慣,那么就能夠更好地利用每一種新的類型提示創(chuàng)新。
重要的是要記住類型提示是可選的,而不是必須的。不是每個項目都需要它們,類型提示可以使你的大項目變得易懂,但小項目卻并不必要。值得注意的是,雖然在運行時不強制執(zhí)行類型提示,但你可以使用 Pydantic 來使之成為可能。許多廣泛使用的 Python 項目:如 FastAPI,都廣泛使用 Pydantic。
2、Python 虛擬環(huán)境和包管理
對于簡單的項目和要求不高的開發(fā)工作,通??梢灾皇褂?Python 的內(nèi)置venv
工具將項目及其需求分開。但 Python 工具的最新進展則為開發(fā)人員提供了更多選擇:
Pyenv:如果你需要安裝多個 Python 版本(3.8、3.9、3.10)以滿足不同的項目要求,Pyenv 允許你在每個項目的基礎(chǔ)上在它們之間進行全局切換。值得注意的是,它沒有官方的 Windows 支持,但確實存在非官方的 Windows 端口。
Pipenv:被稱為“Python dev workflow for humans”,Pipenv 旨在管理虛擬環(huán)境以及項目的所有依賴項。它還確保依賴關(guān)系是確定性的 —— 你得到你想要的特定版本,并且它們以你要求的組合方式工作。但是,Pipenv 不涉及任何形式的打包,因此對于你最終想要上傳到 PyPI 或與他人共享的項目來說,它并不理想。
Poetry:Poetry 擴展了 Pipenv 的工具集,不僅可以管理項目和需求,還可以輕松地將項目部署到 PyPI。它還為你管理獨立于項目目錄的虛擬環(huán)境。
PDM:PDM(“Python Development Master”的縮寫)是這方面最新的前沿項目。與 Poetry 和 Pipenv 一樣,PDM 為你提供了一個用于設(shè)置項目、管理其依賴項以及從中構(gòu)建分發(fā)工件的單一界面。PDM 還使用 PEP 582 標準將包本地存儲到項目中,因此無需創(chuàng)建每個項目的虛擬環(huán)境。但是這個工具相對較新,所以在生產(chǎn)中采用它之前要確保它能暫時工作。
3、新的 Python 語法
Python 的發(fā)展意味著該語言本身增加了許多新功能。Python 最新的幾個版本中添加了一些有用的語法結(jié)構(gòu),使其更強大和更簡潔程。最近增加的一些內(nèi)容包括:
Pattern matching
最近最大的新增功能是結(jié)構(gòu)模式匹配,出現(xiàn)在 Python 3.10 中。它不僅僅是所謂的“switch/case for Python”,還可以讓你根據(jù)對象的內(nèi)容或結(jié)構(gòu)做出控制流決策。
The ‘walrus operator’
因其外觀 (:=) 而得名,在 Python 3.8 中添加的“walrus operator(海象操作符)”引入了賦值表達式,這是一種將一個值賦給一個變量,然后在一個步驟中對該變量進行測試的方法。它可以在許多常見情況下減少冗長的代碼,例如檢查函數(shù)的返回值同時保留結(jié)果。
Positional-only parameters
最近對 Python 語法的一個小而有用的新增功能 positional-only parameters 允許你指明哪些函數(shù)參數(shù)必須指定為位置參數(shù),而不是關(guān)鍵字參數(shù)。這樣做的基本原理通常包括提高代碼庫的清晰度和簡化代碼庫的未來開發(fā),這也是許多 Python 的其他新特性所關(guān)注的目標。
4、Python 測試
Python 有自己的內(nèi)置測試框架 Unittest,雖然 Unittest 作為默認設(shè)置還不錯,但它的設(shè)計和行為已經(jīng)過時了。Pytest 框架已成為一種常見的替代品,要更靈活(你可以在代碼的任何部分聲明測試,而不僅僅是一個子集),并且需要編寫的模板少得多。另外,Pytest 還有大量的附加組件來擴展其功能(例如,用于測試異步代碼)。