首頁  >  文章  >  後端開發  >  Python 3.11中最佳的新功能和功能修復

Python 3.11中最佳的新功能和功能修復

WBOY
WBOY轉載
2022-05-30 18:57:552709瀏覽

本篇文章為大家帶來了關於python的相關知識,其中主要介紹了關於3.11版本中的最佳新功能和功能修復,以下是Python 3.11中最重要的新特性的概述,以及它們對Python開發人員的意義,下面一起來看一下,希望對大家有幫助。

Python 3.11中最佳的新功能和功能修復

推薦學習:python影片教學

Python程式語言每年都會發布新版本,上半年發布了一個功能鎖定的beta版本,年底將發布最終版本。 Python 3.11的功能集剛定稿,有一個測試版可供測試。開發人員被鼓勵在非生產程式碼上試用此最新版本,以驗證它是否與您的程式不相衝突,並了解您的程式碼是否會從其效能增強中受益。

以下是Python 3.11中最重要的新特性的概述,以及它們對Python開發人員的意義。

速度提升: 

        Python 3.11中有許多單獨的效能改進,但最大的增加是專門的自適應解譯器。由於物件的類型很少更改,解釋器現在嘗試分析運行的程式碼,並用特定類型的字節碼替換常規字節碼。例如,二進位操作(加法、減法等)可以替換為整數、浮點和字串的專用版本。

在Python 3.11中,Python函數呼叫也需要較少的開銷。函數呼叫的堆疊幀現在使用的記憶體更少,設計效率更高。此外,雖然遞歸呼叫沒有進行尾部最佳化(無論如何,這在Python中可能是不可能的),但它們比以前的版本更有效率。 Python解釋器本身的啟動速度也更快,Python運作時所需的核心模組的儲存和載入效率也更高。

         以官方的Python基準測試套件,Python 3.11的速度大約是3.10版的1.25倍。請注意,這個加速是一個總體衡量標準:有些東西要快得多,但其他許多東西只是略快或大致相同。儘管如此,這些改進最好的部分是免費的。您無需對Python程式進行任何程式碼變更即可利用3.11的加速。

 增強的錯誤訊息提示:

        3.11中另一個非常有用的功能是更詳細的錯誤訊息。由於解釋器中使用了新的解析器,Python 3.10已經有了更好的錯誤回報。現在,Python 3.11對此進行了擴展,提供了關於給定表達式的哪個特定部分導致錯誤的詳細回饋。

       思考以下引發錯誤的程式碼:        

x = [1,2,3]
z = x[1][0]

 在Python 3.10中,我們會收到以下錯誤訊息,這不是很有幫助:

  File "C:\Python311\code.py", line 2, in 
    z = x[1][0]
TypeError: 'int' object is not subscriptable

)與其讓我們弄清楚清楚哪個int是不可編譯的程式碼,Python 3.11中的錯誤追蹤指向產生錯誤的行的確切部分:

  File "C:\Python311\code.py", line 2, in 
    z = x[1][0]
        ~~~~^^^
TypeError: 'int' object is not subscriptable

現在,問題的出處就十分明確了。

異常改進:

Python的錯誤處理機制在Python 3.11中獲得了許多新特性:

1、使用新的except*語法和新的ExceptionGroup異常類型可以處理多異常問題。這允許優雅地處理可能同時引發多個錯誤的問題,例如在處理非同步或並發方法時,或在重試操作時處理多個故障時。

2、「零成本」異常:除非實際拋出異常,否則現在對程式沒有記憶體消耗。這意味著try/except區塊的預設路徑更快,並且使用更少的記憶體。

3、捕獲異常所需的時間減少了約10%。

4、異常可以透過上下文註解來完善,使得異常與程式碼區塊分離。

類型提升:

Python的類型提示特性使更大的程式碼庫更易於管理和分析,並且自Python 3.5以來,隨著每次修訂類型提示的性能都有顯著增加。 Python 3.11引入了幾個新的類型提示。

自身型別:

類別方法傳回自身型別之前需要遲鈍且詳細的宣告才會生效。類型.Self的模式讓你宣告類別方法的回傳值更為簡單。您可以從這些方法的分析工具中獲得有用且可預測的結果。

任意字串文字類型:

以前,類型註解無法定義給定變數必須是字串文字,即原始程式碼中定義的字串。新類型。 LiteralString註釋修復了這個問題。使用新註釋,linters可以測試變數是來源中定義的字串還是僅由來源定義的字串組成的新字串。

資料類別轉換:

自Python 3.7以來,資料類別使得定義類別變得更加容易,這些類別遵循基於初始化參數創建屬性的常見模式。但沒有標準機制允許行為類似於資料類別(但不是資料類別本身)的東西使用類型註釋來聲明其行為。資料類別轉換新增了 類型.dataclass_transform修飾符去提示編譯器一個給定的函數、類別或元類別的行為像一個資料類別。

可變泛型:

最初的泛型建議包括TypeVar,這是一種使用單一參數化類型指定泛型函數的方法,例如,類型T可以是int或float 。 Python 3.11新增了TypeVarTuple,或稱為“可變泛型”,您可以使用它來指定佔位符,不僅僅是一種類型,而是一系列類型,表示為元組。這在像NumPy這樣的庫中尤其有用,在這些庫中,您可以提前檢查錯誤,例如提供的數組的形狀是否正確。

stdlib中支援TOML唯讀:

Python使用TOML或Tom明確的簡約語言作為配置格式(如pyproject.TOML),但沒有將讀取TOML格式檔案的能力公開為標準庫模組。 Python 3.11加入了tomllib來解決這個問題。注意,tomllib不會建立或寫入TOML檔案;為此,您需要像Tomli-W或TOML Kit這樣的第三方模組。

正規表示式的原子分組和加速:

Python的re模組用於處理正規表示式,它缺少正規表示式的其他實作中的一些特性。一種是原子分組,在其他語言中廣泛支持。 Python 3.11現在使用原子分組的通用語法支援此模式(例如,(?>…)。

#re模組的模式匹配引擎也被重寫了一些,運行速度快了大約10%。

從標準庫中刪除「壞死的電池」:

PEP 594啟動了一項從Python標準庫中移除許多所謂的壞死的電池或過時或未維護的模組的工作。從Python 3.11開始,這些庫被標記為已棄用,但尚未刪除;它們將在Python 3.13中完全刪除。

Python 3.11其它新增功能、修復和更改:

Python 3.11中還有許多更小的改進:

#1、Python物件需要更少的內存,因為它們的名稱空間現在是延遲創建的,它們的名稱空間字典現在盡可能共享鍵。

2、所有鍵都是Unicode的字典不再需要儲存哈希,因此減少了字典的大小並允許更高的快取效率。

3、Python運行時使用的是Python的解釋器,現在可以實驗性地支援編譯到WebAssembly。這可能有助於PyScript等專案的未來開發,PyScript允許WASM編譯的Python運行時在瀏覽器中運行。

推薦學習: python影片教學

以上是Python 3.11中最佳的新功能和功能修復的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除