偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python 3.12 新特性盤點(diǎn):從錯誤消息到性能優(yōu)化

開發(fā) 前端
在性能優(yōu)化方面,Python 3.12 繼續(xù)推進(jìn) faster-cpython 項目,通過加速和專門化字節(jié)碼執(zhí)行,顯著提升了代碼的運(yùn)行速度。該版本還改進(jìn)了列表推導(dǎo)和其他推導(dǎo)操作的執(zhí)行效率,使得數(shù)據(jù)處理更加高效。

Python 3.12 引入了一系列顯著的特性和改進(jìn),進(jìn)一步提升了開發(fā)者的體驗和語言的性能。該版本在錯誤消息方面做了重要改進(jìn),提供了更詳細(xì)且富有指導(dǎo)性的提示,幫助開發(fā)者更快定位問題。格式化字符串(f-strings)的功能也得到了增強(qiáng),允許更強(qiáng)大的字符串格式化。

在性能優(yōu)化方面,Python 3.12 繼續(xù)推進(jìn) faster-cpython 項目,通過加速和專門化字節(jié)碼執(zhí)行,顯著提升了代碼的運(yùn)行速度。該版本還改進(jìn)了列表推導(dǎo)和其他推導(dǎo)操作的執(zhí)行效率,使得數(shù)據(jù)處理更加高效。

此外,Python 3.12 支持 Linux perf Profiler,為性能分析提供了更多工具。每個子解釋器現(xiàn)在配備獨(dú)立的 GIL(全局解釋器鎖),提高了并發(fā)性能。新增了不可變對象和用于顯式繼承的覆蓋裝飾器,并引入了 itertools.batched() 方法以便將可迭代對象中的項目分組,以及改進(jìn)了 Path.walk() 方法以列出文件和子目錄。這些改進(jìn)進(jìn)一步增強(qiáng)了 Python 作為開發(fā)語言的功能性和靈活性。

改進(jìn)的錯誤消息

在 Python 3.10 中,許多錯誤消息,尤其是語法錯誤消息,變得更加詳細(xì)和準(zhǔn)確。同樣,Python 3.11 在追蹤回溯信息中增加了更多內(nèi)容,使得定位出錯代碼變得更加方便。

最新版本的 Python 3.12 繼續(xù)改善開發(fā)者體驗,提供了更好的錯誤消息。特別是一些常見的錯誤消息現(xiàn)在附帶了有用的建議。

圖片圖片

當(dāng)您在沒有先導(dǎo)入 math 的情況下使用它時,您會得到一個傳統(tǒng)的 NameError。此外,解析器會幫助提醒您在訪問 math 之前需要導(dǎo)入它。

關(guān)于提示導(dǎo)入模塊的提醒僅適用于標(biāo)準(zhǔn)庫模塊。對于這些錯誤消息,Python 3.12 不會跟蹤安裝的第三方包。

目前由于ipython有字節(jié)錯誤處理機(jī)制,提示導(dǎo)入包在ipython 里面沒有實現(xiàn)。

圖片圖片

可以使用 from-import 語句從模塊中導(dǎo)入特定名稱。如果您不小心將關(guān)鍵字的順序顛倒了,現(xiàn)在會得到一個友好的提示,指導(dǎo)您使用正確的語法:

圖片圖片

看看如果您從 math 模塊導(dǎo)入 py 而不是 pi 會發(fā)生什么:

圖片圖片

更強(qiáng)大的 F-string

格式化字符串,簡稱 f-string,是在 PEP 498 和 Python 3.6 中引入的。通過 f-string,Python 增加了字符串格式化功能。您可以通過前導(dǎo)的 f 來識別 f-string,如以下示例:

圖片圖片

關(guān)于F-String 在python 3.12 新特征,可以參考:《一文帶您了解F-string:解鎖Python3.12下F-string的新特性》

更快的 Python:更多專門化和內(nèi)聯(lián)列表推導(dǎo)

當(dāng) Python 3.11 在 2022 年發(fā)布時,關(guān)于解釋器優(yōu)化的討論非常熱烈,這些優(yōu)化使得 Python 變得更快。這項工作是名為 faster-cpython 的持續(xù)努力的一部分,并在 Python 3.12 中繼續(xù)進(jìn)行。

在 Python 腳本開始運(yùn)行之前,代碼會被轉(zhuǎn)換成字節(jié)碼。字節(jié)碼是 Python 解釋器執(zhí)行的代碼。Python 3.11 使用了一個專門的自適應(yīng)解釋器,它可以在執(zhí)行過程中改變和調(diào)整字節(jié)碼,以優(yōu)化經(jīng)常發(fā)生的操作。這包括兩個步驟:

  • 加速:識別某些字節(jié)碼被多次執(zhí)行,使其成為專門化的候選對象。
  • 專門化:解釋器將一般的字節(jié)碼替換為專門化的字節(jié)碼。例如,將兩個浮點(diǎn)數(shù)相加的操作可以替換為一個專門化的加法操作。

在 Python 3.12 中,加速的過程比 Python 3.11 更快,解釋器現(xiàn)在可以專門化更多的新字節(jié)碼。要查看加速和專門化的實際效果,請定義以下函數(shù):

圖片圖片

每一行顯示有關(guān)一個字節(jié)碼指令的信息。五列分別是行號、字節(jié)地址、操作碼名稱、操作參數(shù),以及參數(shù)的解釋(括號內(nèi))。

不需要理解這個字節(jié)碼列表的細(xì)節(jié)。一行 Python 代碼通常會編譯成多個字節(jié)碼指令,在這個例子中,return 0.3048 * feet 被翻譯成四條字節(jié)碼指令。

實際上,現(xiàn)在沒有單獨(dú)的加速步驟。原則上,所有字節(jié)碼指令都立即準(zhǔn)備好進(jìn)行專門化。在 Python 3.11 中,專門化在字節(jié)碼執(zhí)行了相同類型八次后才開始。而python 3.12,這一過程在執(zhí)行兩次后就會發(fā)生:

圖片圖片

解釋器調(diào)整了原始BINARY_OP指令,將其替換為BINARY_OP_MULTIPLY_FLOAT,當(dāng)兩個操作數(shù)都是float時,速度會更快。

解釋器優(yōu)化調(diào)整某些字節(jié)碼,同時也不會損害 Python 的動態(tài)特性。仍然可以使用feet_to_meters()調(diào)整參數(shù)。使用相同數(shù)據(jù)類型的唯一好處是您的程序可能會運(yùn)行得更快。

Python 支持列表推導(dǎo)、字典推導(dǎo)和集合推導(dǎo),您可以使用它們來轉(zhuǎn)換可迭代對象。例如:

圖片圖片

比如下面的列表推導(dǎo)式在以前python版本中,會編譯為嵌套的字節(jié)代碼,如下:

圖片圖片

而在pythyon 3.12 版本中,推導(dǎo)式被編譯為內(nèi)部字節(jié)代碼,也在就是內(nèi)聯(lián)推導(dǎo),大大加快的執(zhí)行速度。如下圖:

圖片圖片

此外Python 3.12 在多個方面進(jìn)行了改進(jìn),包括對 Linux perf Profiler 的支持、每個子解釋器一個 GIL 的機(jī)制,以及引入了不可變對象。此外,新增了用于顯式繼承的覆蓋裝飾器。該版本還引入了 itertools.batched() 方法,以便將可迭代對象中的項目分組,并改進(jìn)了 Path.walk() 方法。

責(zé)任編輯:武曉燕 來源: 新語數(shù)據(jù)故事匯
相關(guān)推薦

2013-05-15 22:17:13

DebianDebian Linu

2021-09-01 07:21:46

堆棧Gopanic

2025-02-20 09:27:46

2024-08-15 08:00:00

MongoDB數(shù)據(jù)庫NoSQL

2012-07-20 09:50:28

2023-12-11 09:02:27

CSS前端CSS 新特性

2021-09-10 17:26:14

Windows 11Windows微軟

2023-03-09 13:41:47

PythonLinux

2022-05-11 09:35:19

安卓Android 13

2025-06-23 00:00:02

線程池Java任務(wù)隊列

2012-07-24 11:42:32

Python

2020-01-14 15:08:44

Redis5Streams數(shù)據(jù)庫

2023-08-01 09:00:00

高并發(fā)性能優(yōu)化

2022-01-10 08:50:13

URL前端頁面

2021-05-27 13:37:24

開發(fā)技能React

2023-06-05 08:19:20

性能優(yōu)化CPU

2024-10-17 16:47:05

磁盤I/O計算機(jī)

2017-08-08 09:45:43

Python性能優(yōu)化

2024-06-19 10:01:50

2021-07-15 08:55:17

ES12 ECMAScript JS 功能
點(diǎn)贊
收藏

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