自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 3.11 中的最佳新特性和修正

譯文 精選
開發(fā)
更快的解釋器,更易懂的錯(cuò)誤,更強(qiáng)大的類型提示,以及其他一系列的加速和調(diào)整,現(xiàn)在都可以試用了。

Python 每年都會(huì)發(fā)布新版本,上半年是功能鎖定的測(cè)試版,年底是最終版本。

Python 3.11 的特性集剛剛定稿,測(cè)試版本已經(jīng)發(fā)布,開發(fā)人員在非生產(chǎn)代碼上可以嘗試使用這個(gè)最新版本,驗(yàn)證它能否在你的程序中工作,并了解你的程序是否能從本次性能增加中受益。

下面是 Python 3.11 中最重要新特性的概述,以及它們對(duì) Python 開發(fā)者的意義。

提速

在 Python 3.11 中,有許多單獨(dú)的性能改進(jìn),最大的一個(gè)新功能是自適應(yīng)解釋器,由于對(duì)象的類型很少更改,解釋器現(xiàn)在嘗試分析正在運(yùn)行的代碼,并用類型特定的字節(jié)碼替換常規(guī)字節(jié)碼。例如,二進(jìn)制操作(加法、減法等)可以被替換為整數(shù)、浮點(diǎn)和字符串的特殊版本替換。

Python 函數(shù)調(diào)用在 Python 3.11 中也需要更少的開銷,用于函數(shù)調(diào)用的堆棧使用的內(nèi)存更少,而且設(shè)計(jì)得更有效。此外,雖然遞歸調(diào)用沒有尾部?jī)?yōu)化(在 Python 中是不可能的) ,但它們比以前的版本更有效率,Python 解釋器本身的啟動(dòng)速度也更快, 運(yùn)行時(shí)所需的核心模塊的存儲(chǔ)和加載效率也更高。

根據(jù)官方的 Python 基準(zhǔn)測(cè)試套件,Python 3.11 運(yùn)行速度比 3.10 快 1.25 倍。注意,這個(gè)速度提升是一個(gè)綜合的衡量標(biāo)準(zhǔn),有些事情要快得多,但許多其他事情只是稍快一點(diǎn)或者大致相同。這些改進(jìn)是無限制的,你不需要對(duì)原 Python 程序進(jìn)行任何修改,就可以享受 3.11 的速度提升。

增強(qiáng)錯(cuò)誤信息

Python 3.11 中另一個(gè)有用的特性是更詳細(xì)的錯(cuò)誤信息,Python 3.10 已經(jīng)有了更好的錯(cuò)誤報(bào)告,這要?dú)w功于解釋器中使用新的分析器。現(xiàn)在,Python 3.11 在此基礎(chǔ)上進(jìn)行了擴(kuò)展,提供了關(guān)于給定表達(dá)式的哪個(gè)具體部分導(dǎo)致錯(cuò)誤的詳細(xì)反饋。

3.11 中另一個(gè)非常有用的特性是更詳細(xì)的錯(cuò)誤消息,由于解釋器中使用了新的解析器,Python 3.10 已經(jīng)有了更好的錯(cuò)誤報(bào)告?,F(xiàn)在,Python 3.11 對(duì)此進(jìn)行了擴(kuò)展,提供了給定表達(dá)式的哪個(gè)具體部分導(dǎo)致錯(cuò)誤的詳細(xì)反饋。

考慮以下代碼,它拋出了一個(gè)錯(cuò)誤:

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

在 Python 3.10 中,我們會(huì)收到下面的錯(cuò)誤消息,這并不是很有幫助:

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

Python 3.11 中的錯(cuò)誤跟蹤直接指向生成錯(cuò)誤的確切部分,而不是讓我們猜測(cè)哪個(gè) int 是不可編寫的腳本。

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

現(xiàn)在,問題出現(xiàn)在哪里已經(jīng)沒有歧義了。

改進(jìn)異常

在 Python 3.11 中,Python 的錯(cuò)誤處理機(jī)制 Exceptions 獲得了許多新特性:

  • 通過新的 except * 語法和新的 ExceptionGroup 異常類型,可以一次引發(fā)和處理多個(gè)異常,例如在處理異步或并發(fā)方法時(shí),或者在重試操作時(shí)處理多個(gè)失敗時(shí),它可以更優(yōu)雅的處理。
  • Zero-cost 異常:異?,F(xiàn)在對(duì)程序沒有任何成本,除非它們真的被引發(fā),這意味著 try/except 代碼塊會(huì)更快,并使用更少的內(nèi)存。
  • 捕獲異常所需的時(shí)間減少了 10% 左右。
  • 異??梢耘c本身的文本分開,并通過上下文注釋來豐富。

改進(jìn)類型

Python 的類型提示功能使更大的代碼庫(kù)容易管理和分析,并且自 Python 3.5 以來的每次修訂都有顯著的增長(zhǎng),Python 3.11 帶來了幾個(gè)新的類型提示功能。

自我類型

以前,類方法 return self 需要復(fù)雜而冗長(zhǎng)的注解才能發(fā)揮作用, typing.Self 可以簡(jiǎn)單的將類方法的返回值注釋為 Self,你可以從分析工具中得到有用和可預(yù)測(cè)的結(jié)果。

任意的字符串字面類型

以前,類型注解無法指示給定的變量必須是字符串字面量(即源代碼中定義的字符串)。新的 typing.LiteralString 注解修復(fù)了這個(gè)問題,使用新的注解,字面量可以測(cè)試變量是在源碼中定義的字符串,還是由源代碼定義的字符串組成的新字符串。

數(shù)據(jù)類轉(zhuǎn)換

從 Python 3.7 開始,數(shù)據(jù)類使定義類更加容易,這些類遵循通用模式,根據(jù)它們的初始化參數(shù)創(chuàng)建屬性。但沒有標(biāo)準(zhǔn)的機(jī)制來允許表現(xiàn)得像數(shù)據(jù)類(但不是數(shù)據(jù)類)的內(nèi)容,使用類型注解來聲明它們的行為,數(shù)據(jù)類轉(zhuǎn)換添加裝飾器 typing.Dataclass _ transform 指示給定的函數(shù)、類或元類像數(shù)據(jù)類一樣工作。

可變參數(shù)泛型

類型提示的最初提議包括 TypeVar ,它是一種使用單一參數(shù)類型來指定泛型函數(shù)的方法,例如,類型 T 可以是 int 或 float ,Python 3.11 添加了 TypeVarTuple 或者 “variadic generics” ,你可以使用它來指定占位符,不僅是一種類型,而且是一系列類型,表現(xiàn)形式為元組,在 NumPy 之類的庫(kù)中特別有用,在這些庫(kù)中,你可以提前執(zhí)行錯(cuò)誤檢查,比如判斷輸入數(shù)組是否正確。

標(biāo)準(zhǔn)庫(kù)中的 TOML 只讀支持

Python 使用 TOML(即 Tom’s Obvious Minimal Language)作為配置格式 (如 pyproject.toml),但沒有將讀取 TOML 格式文件的能力作為一個(gè)標(biāo)準(zhǔn)庫(kù)模塊公開。Python 3.11 增加了 tomllib 來解決這個(gè)問題,注意 tomllib 不能創(chuàng)建或?qū)懭?TOML 文件,因此你需要一個(gè)第三方模塊,如 Tomli-W 或 TOML Kit 。

正則表達(dá)式的原子組和提速

用于處理正則表達(dá)式的 re 模塊,缺少其他正則表達(dá)式實(shí)現(xiàn)中的一些特性。一種是原子組,在其他語言中得到廣泛支持,Python 3.11 現(xiàn)在使用通用的原子分組語法(例如, (? > ...) )。

re 模塊的模式匹配引擎也進(jìn)行了一些重寫,運(yùn)行速度提高了 10% 。

從標(biāo)準(zhǔn)庫(kù)中刪除“dead batteries”

PEP 594 啟動(dòng)了一項(xiàng)工作,從 Python 標(biāo)準(zhǔn)庫(kù)中刪除了許多所謂的“dead batteries”,即過時(shí)或未維護(hù)的模塊,在 Python 3.11 中,這些庫(kù)被標(biāo)記為已棄用但尚未刪除; 它們將在 Python 3.13 中完全刪除。

Python 3.11 其他的新增內(nèi)容、修正和變化

在 Python 3.11 中還有更多的小改進(jìn):

  • Python 對(duì)象需要更少的內(nèi)存,因?yàn)樗鼈兊拿Q空間現(xiàn)在是延遲創(chuàng)建的,并且它們的名稱空間字典會(huì)盡可能的共享鍵。
  • 所有鍵都是 Unicode 的字典,而且不再需要存儲(chǔ)散列,從而減少了字典的大小,并提高了緩存效率。
  • CPython 運(yùn)行時(shí)(Python 解釋器),現(xiàn)在已經(jīng)有了編譯到 WebAssembly 的實(shí)驗(yàn)性支持,這可能有助于像 PyScript 這種項(xiàng)目的未來發(fā)展,它允許一個(gè) WASM 編譯的 Python 運(yùn)行時(shí)在瀏覽器中運(yùn)行。

譯者介紹

王德朕,51CTO社區(qū)編輯,10年互聯(lián)網(wǎng)產(chǎn)研經(jīng)驗(yàn),6年IT教培行業(yè)經(jīng)驗(yàn)。原K12教育上市公司產(chǎn)品經(jīng)理,技術(shù)博客專家,藍(lán)橋簽約作者,《滾雪球?qū)WPython》專欄作者,《爬蟲100例》專欄特約作者,78技術(shù)人社區(qū)發(fā)起者。

原文標(biāo)題:The best new features and fixes in Python 3.11,作者:Serdar Yegulalp

鏈接:https://www.infoworld.com/article/3660550/the-best-new-features-and-fixes-in-python-311.html

責(zé)任編輯:莫奇 來源: 51CTO技術(shù)棧
相關(guān)推薦

2023-07-25 16:14:51

Python技巧

2013-07-16 16:06:35

Linux 3.11Logo

2024-09-25 16:31:02

2021-10-27 10:15:25

Python新特性編程語言

2023-01-05 08:00:24

RegExpFoo類字段

2010-08-10 09:15:55

FlexSDK4

2009-02-04 17:33:24

ibmdwPython

2013-08-26 10:22:22

Linux桌面

2021-10-08 15:55:52

Python模塊開發(fā)

2013-05-02 09:14:19

Java 8Java 8的新特性

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-08-28 08:46:15

Windows 7防火墻

2022-11-09 10:03:39

UbuntuLinux

2021-06-23 09:46:16

Python 3.10結(jié)構(gòu)模式管理器

2024-01-15 00:30:04

Python 3語言版本

2023-05-04 07:48:29

Debian 12Linux

2012-02-15 09:37:38

Firefox

2009-01-16 10:01:57

MySQL復(fù)制特性測(cè)試

2012-05-18 14:36:50

Fedora 17桌面環(huán)境

2014-02-17 10:54:13

PostgreSQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)