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