...

2022 年現代 Python 編程的(de) 4 個(gè)關鍵點

2022-01-29

作爲(wéi / wèi)一(yī / yì /yí)個(gè)誕生已有 30 餘年的(de)編程語言,Python 的(de)流行度在(zài)近幾年迎來(lái)了(le/liǎo)爆炸性的(de)增長。爲(wéi / wèi)了(le/liǎo)方便大(dà)家能夠更好的(de)采用 Python,利用該語言中所有新的(de)和(hé / huò)強大(dà)的(de)功能;InfoWorld 歸納總結了(le/liǎo)開發人(rén)員在(zài) 2022 年編寫現代 Python 時(shí)所需要(yào / yāo)理解的(de)一(yī / yì /yí)些關鍵概念。

總共四個(gè)方面,具體如下:

1、Python 中的(de)類型提示

Python 最近引入的(de)類型提示語法允許 linter 和(hé / huò)第三方代碼質量工具在(zài)運行前分析你的(de)代碼,并在(zài)檢測出(chū)可能發生的(de)錯誤。你創建的(de) Python 代碼與他(tā)人(rén)共享的(de)次數越多,大(dà)家就(jiù)越有可能從使用類型提示中受益。

Python 的(de)每個(gè)後續版本都推出(chū)了(le/liǎo)更複雜、更強大(dà)的(de)類型注解。如果你養成了(le/liǎo)在(zài)短期内學習如何使用類型注解的(de)習慣,那麽就(jiù)能夠更好地(dì / de)利用每一(yī / yì /yí)種新的(de)類型提示創新。

重要(yào / yāo)的(de)是(shì)要(yào / yāo)記住類型提示是(shì)可選的(de),而(ér)不(bù)是(shì)必須的(de)。不(bù)是(shì)每個(gè)項目都需要(yào / yāo)它們,類型提示可以(yǐ)使你的(de)大(dà)項目變得易懂,但小項目卻并不(bù)必要(yào / yāo)。值得注意的(de)是(shì),雖然在(zài)運行時(shí)不(bù)強制執行類型提示,但你可以(yǐ)使用 Pydantic 來(lái)使之(zhī)成爲(wéi / wèi)可能。許多廣泛使用的(de) Python 項目:如 FastAPI,都廣泛使用 Pydantic。

2、Python 虛拟環境和(hé / huò)包管理

對于(yú)簡單的(de)項目和(hé / huò)要(yào / yāo)求不(bù)高的(de)開發工作,通常可以(yǐ)隻使用 Python 的(de)内置venv工具将項目及其需求分開。但 Python 工具的(de)最新進展則爲(wéi / wèi)開發人(rén)員提供了(le/liǎo)更多選擇:

 

  • Pyenv:如果你需要(yào / yāo)安裝多個(gè) Python 版本(3.8、3.9、3.10)以(yǐ)滿足不(bù)同的(de)項目要(yào / yāo)求,Pyenv 允許你在(zài)每個(gè)項目的(de)基礎上(shàng)在(zài)它們之(zhī)間進行全局切換。值得注意的(de)是(shì),它沒有官方的(de) Windows 支持,但确實存在(zài)非官方的(de) Windows 端口。

  • Pipenv:被稱爲(wéi / wèi)“Python dev workflow for humans”,Pipenv 旨在(zài)管理虛拟環境以(yǐ)及項目的(de)所有依賴項。它還确保依賴關系是(shì)确定性的(de) —— 你得到(dào)你想要(yào / yāo)的(de)特定版本,并且它們以(yǐ)你要(yào / yāo)求的(de)組合方式工作。但是(shì),Pipenv 不(bù)涉及任何形式的(de)打包,因此對于(yú)你最終想要(yào / yāo)上(shàng)傳到(dào) PyPI 或與他(tā)人(rén)共享的(de)項目來(lái)說(shuō),它并不(bù)理想。

  • Poetry:Poetry 擴展了(le/liǎo) Pipenv 的(de)工具集,不(bù)僅可以(yǐ)管理項目和(hé / huò)需求,還可以(yǐ)輕松地(dì / de)将項目部署到(dào) PyPI。它還爲(wéi / wèi)你管理獨立于(yú)項目目錄的(de)虛拟環境。

  • PDM:PDM(“Python Development Master”的(de)縮寫)是(shì)這(zhè)方面最新的(de)前沿項目。與 Poetry 和(hé / huò) Pipenv 一(yī / yì /yí)樣,PDM 爲(wéi / wèi)你提供了(le/liǎo)一(yī / yì /yí)個(gè)用于(yú)設置項目、管理其依賴項以(yǐ)及從中構建分發工件的(de)單一(yī / yì /yí)界面。PDM 還使用 PEP 582 标準将包本地(dì / de)存儲到(dào)項目中,因此無需創建每個(gè)項目的(de)虛拟環境。但是(shì)這(zhè)個(gè)工具相對較新,所以(yǐ)在(zài)生産中采用它之(zhī)前要(yào / yāo)确保它能暫時(shí)工作。

3、新的(de) Python 語法

Python 的(de)發展意味着該語言本身增加了(le/liǎo)許多新功能。Python 最新的(de)幾個(gè)版本中添加了(le/liǎo)一(yī / yì /yí)些有用的(de)語法結構,使其更強大(dà)和(hé / huò)更簡潔程。最近增加的(de)一(yī / yì /yí)些内容包括:

Pattern matching

最近最大(dà)的(de)新增功能是(shì)結構模式匹配,出(chū)現在(zài) Python 3.10 中。它不(bù)僅僅是(shì)所謂的(de)“switch/case for Python”,還可以(yǐ)讓你根據對象的(de)内容或結構做出(chū)控制流決策。

The ‘walrus operator’

因其外觀 (:=) 而(ér)得名,在(zài) Python 3.8 中添加的(de)“walrus operator(海象操作符)”引入了(le/liǎo)賦值表達式,這(zhè)是(shì)一(yī / yì /yí)種将一(yī / yì /yí)個(gè)值賦給一(yī / yì /yí)個(gè)變量,然後在(zài)一(yī / yì /yí)個(gè)步驟中對該變量進行測試的(de)方法。它可以(yǐ)在(zài)許多常見情況下減少冗長的(de)代碼,例如檢查函數的(de)返回值同時(shí)保留結果。

Positional-only parameters

最近對 Python 語法的(de)一(yī / yì /yí)個(gè)小而(ér)有用的(de)新增功能 positional-only parameters 允許你指明哪些函數參數必須指定爲(wéi / wèi)位置參數,而(ér)不(bù)是(shì)關鍵字參數。這(zhè)樣做的(de)基本原理通常包括提高代碼庫的(de)清晰度和(hé / huò)簡化代碼庫的(de)未來(lái)開發,這(zhè)也(yě)是(shì)許多 Python 的(de)其他(tā)新特性所關注的(de)目标。

4、Python 測試

Python 有自己的(de)内置測試框架 Unittest,雖然 Unittest 作爲(wéi / wèi)默認設置還不(bù)錯,但它的(de)設計和(hé / huò)行爲(wéi / wèi)已經過時(shí)了(le/liǎo)。Pytest 框架已成爲(wéi / wèi)一(yī / yì /yí)種常見的(de)替代品,要(yào / yāo)更靈活(你可以(yǐ)在(zài)代碼的(de)任何部分聲明測試,而(ér)不(bù)僅僅是(shì)一(yī / yì /yí)個(gè)子(zǐ)集),并且需要(yào / yāo)編寫的(de)模闆少得多。另外,Pytest 還有大(dà)量的(de)附加組件來(lái)擴展其功能(例如,用于(yú)測試異步代碼)。


來(lái)源:oschina