最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

六星源課堂:Python 3.11 中的最佳新特性和修正!

2022-06-05 09:34 作者:六星源課堂  | 我要投稿

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

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

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

PART 01:提速

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

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

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

PART 02:增強(qiáng)錯誤信息

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

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

考慮以下代碼,它拋出了一個錯誤:

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

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

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

PART 03:改進(jìn)異常

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

  • 通過新的 except * 語法和新的 ExceptionGroup 異常類型,可以一次引發(fā)和處理多個異常,例如在處理異步或并發(fā)方法時,或者在重試操作時處理多個失敗時,它可以更優(yōu)雅的處理。

  • Zero-cost 異常:異?,F(xiàn)在對程序沒有任何成本,除非它們真的被引發(fā),這意味著 try/except 代碼塊會更快,并使用更少的內(nèi)存。

  • 捕獲異常所需的時間減少了 10% 左右。

  • 異??梢耘c本身的文本分開,并通過上下文注釋來豐富。

PART 04:改進(jìn)類型

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

1、自我類型

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

2、任意的字符串字面類型

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

3、數(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ù)類一樣工作。

4、可變參數(shù)泛型

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

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

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

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

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

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

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

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

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

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

  • Python 對象需要更少的內(nèi)存,因為它們的名稱空間現(xiàn)在是延遲創(chuàng)建的,并且它們的名稱空間字典會盡可能的共享鍵。

  • 所有鍵都是 Unicode 的字典,而且不再需要存儲散列,從而減少了字典的大小,并提高了緩存效率。

  • CPython 運(yùn)行時(Python 解釋器),現(xiàn)在已經(jīng)有了編譯到 WebAssembly 的實驗性支持,這可能有助于像 PyScript 這種項目的未來發(fā)展,它允許一個 WASM 編譯的 Python 運(yùn)行時在瀏覽器中運(yùn)行。

以上就是本次分享的全部內(nèi)容,想學(xué)習(xí)更多Python技巧,歡迎持續(xù)關(guān)注六星源課堂!

六星源課堂:Python 3.11 中的最佳新特性和修正!的評論 (共 條)

分享到微博請遵守國家法律
板桥市| 盐亭县| 丹江口市| 凤冈县| 元氏县| 宣威市| 玉门市| 扶余县| 包头市| 黑山县| 玉田县| 常宁市| 大理市| 体育| 丽水市| 溧阳市| 汾阳市| 上饶市| 彰化县| 三江| 丹阳市| 盐山县| 铜陵市| 博爱县| 洮南市| 句容市| 福州市| 兖州市| 阿鲁科尔沁旗| 奉贤区| 万荣县| 始兴县| 尼木县| 乌鲁木齐县| 平罗县| 兴义市| 娱乐| 石台县| 东宁县| 新兴县| 怀远县|