日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 3.8 稳定版正式发布,新特性全面解读

發(fā)布時間:2025/3/15 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 3.8 稳定版正式发布,新特性全面解读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

早在之前關(guān)于 Python 新版本的文檔在官方一就直處于更新模式中,就在昨日 Python 3.8 穩(wěn)定版正式發(fā)布了,讓我們來看看新版本有哪些新特性呢?

Python 3.8.0 穩(wěn)定版的新特性

1PEP 572,賦值表達式

有一種新語法:=可將值賦給變量,作為較大表達式的一部分。由于它與海象的眼睛和象牙很像,因此被親切地稱為“海象操作員” 。

在此示例中,賦值表達式有助于避免調(diào)用 len()兩次:

if (n := len(a)) > 10:print(f"List is too long ({n} elements, expected <= 10)")

在正則表達式匹配期間會產(chǎn)生類似的好處,其中需要兩次匹配對象,一次是測試是否發(fā)生匹配,另一次是提取子組:

discount = 0.0 if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.0

該運算符對 while 循環(huán)也很有用,該循環(huán)計算一個值以測試循環(huán)終止,然后在循環(huán)體中再次需要相同的值:

# Loop over fixed length blocks while (block := f.read(256)) != '': process(block)

另一個具有啟發(fā)性的用例出現(xiàn)在列表理解中,其中表達式主體中還需要在過濾條件下計算出的值:

[clean_name.title() for name in namesif (clean_name := normalize('NFC', name)) in allowed_names]

嘗試限制使用海象運算符來清理可降低復雜性并提高可讀性的案例。

2PEP 570,僅位置的參數(shù)

有一個新的函數(shù)參數(shù)語法,/以指示某些函數(shù)參數(shù)必須在位置上指定,并且不能用作關(guān)鍵字參數(shù)。這 help() 與用 Larry Hastings 的 Argument Clinic 工具注釋的 C 函數(shù)所顯示的符號相同。

3并行文件系統(tǒng)緩存,用于編譯的字節(jié)碼

新的 PYTHONPYCACHEPREFIX 設(shè)置(也可作為 )將隱式字節(jié)碼緩存配置為使用單獨的并行文件系統(tǒng)樹,而不是每個源目錄中的默認子目錄。-X pycache_prefix__pycache__

緩存的位置報告在 sys.pycache_prefix (None指示__pycache__ 子目錄中的默認位置)。

4調(diào)試版本與發(fā)行版本共享 ABI

不管是在發(fā)布模式還是調(diào)試模式下構(gòu)建,Python 現(xiàn)在都使用相同的 ABI。在 Unix 上,當 Python 以調(diào)試模式構(gòu)建時,現(xiàn)在可以加載以發(fā)布模式構(gòu)建的 C 擴展和使用穩(wěn)定 ABI 構(gòu)建的 C 擴展

?

5f 字符串支持一個方便的 = 說明符進行調(diào)試

= 在 f-string 中添加了一個說明符。f 字符串(例如) f'{expr=}' 將擴展為表達式的文本,等號,然后擴展為求值表達式的表示形式

6PEP 578:Python運行時審核掛鉤

PEP 添加了“審核掛鉤”和“已驗證的打開掛鉤”。兩者都可以從 Python 和本機代碼獲得,從而允許使用純Python代碼編寫的應(yīng)用程序和框架利用額外的通知,同時還允許嵌入程序或系統(tǒng)管理員在始終啟用審核的情況下部署Python 版本。

7PEP 587:Python初始化配置

在 PEP 587 添加了新的 C API 以配置 Python 初始化,從而提供了對整個配置的更好控制和更好的錯誤報告。

?

該 PEP 還向這些內(nèi)部結(jié)構(gòu)添加了_PyRuntimeState.preconfig(PyPreConfig類型)和 PyInterpreterState.config(PyConfig類型)字段。PyInterpreterState.config 成為新的參考配置,替換全局配置變量和其他私有變量。

8Vectorcall:對于 CPython 的一個快速調(diào)用協(xié)議

“ vectorcall”協(xié)議已添加到 Python / C API。它旨在將已經(jīng)針對各種類進行的現(xiàn)有優(yōu)化形式化。任何實現(xiàn)可調(diào)用的擴展類型都可以使用此協(xié)議。目前這是臨時的,目的是使其在 Python 3.9 中完全公開。

9pickle 協(xié)議 5 用于出帶外數(shù)據(jù)緩沖器

當 pickle 用于在 Python 進程之間傳輸大數(shù)據(jù)以利用多核或多計算機處理時,重要的是通過減少內(nèi)存副本并可能通過應(yīng)用自定義技術(shù)(例如依賴數(shù)據(jù)的壓縮)來優(yōu)化傳輸。

該 pickle 協(xié)議5 引入用于出帶外緩沖器,其中支持可以根據(jù)通信層的判斷,與 PEP 3118 兼容的數(shù)據(jù)與主 pickle 流分開發(fā)送。

其他語言的變化

一個 continue 說法是非法 finally 條款因與實施問題。在Python 3.8中,這一限制被取消了。continue 現(xiàn)在在 finally: 塊中。

該 int 類型現(xiàn)在具有 as_integer_ratio() 與現(xiàn)有 float.as_integer_ratio() 方法兼容的新方法.

增加了對 \N{name} 的支持。

Dict 和 dictviews 現(xiàn)在可以使用反向插入順序進行迭代 reversed()。

函數(shù)調(diào)用中允許關(guān)鍵字名稱的語法進一步受到限制。特別是, f((keyword)=arg) 不再允許。

現(xiàn)在允許 Iterable 解包,而不使用括號 yield 和 return 語句。

不是有效轉(zhuǎn)義序列的反斜杠字符對 DeprecationWarning從Python 3.6 開始生成。在Python 3.8中它生成了一個SyntaxWarning代替。

SyntaxWarning 在某些情況下,編譯器會在元組或列表之前錯過逗號時生成

子類之間的算術(shù)運算 datetime.date 或 datetime.datetime 與datetime.timedelta 對象現(xiàn)在返回子類的實例,而不是基類。這也會影響其實現(xiàn)(直接或間接)使用 datetime.timedelta 算術(shù)的操作的返回類型。例如 datetime.datetime.astimezone()。

當 Python 解釋器被 Ctrl-C(SIGINT)中斷并且 KeyboardInterrupt 未捕獲到的結(jié)果異常時,Python 進程現(xiàn)在通過 SIGINT 信號或正確的退出代碼退出,以便調(diào)用進程可以檢測到它因 Ctrl 而死亡-C。POSIX 和 Windows 上的shell使用它來正確終止交互式會話中的腳本。

.........

新模塊

新 importlib.metadata 模塊提供(臨時)支持,用于從第三方程序包中讀取元數(shù)據(jù)。例如,它可以提取已安裝的軟件包的版本號,入口點列表等:

>>> # Note following example requires that the popular "requests" >>> # package has been installed.>>>>>> from importlib.metadata import version, requires, files>>> version('requests')'2.22.0'>>> list(requires('requests'))['chardet (<3.1.0,>=3.0.2)']>>> list(files('requests'))[:5][PackagePath('requests-2.22.0.dist-info/INSTALLER'), PackagePath('requests-2.22.0.dist-info/LICENSE'), PackagePath('requests-2.22.0.dist-info/METADATA'), PackagePath('requests-2.22.0.dist-info/RECORD'), PackagePath('requests-2.22.0.dist-info/WHEEL')]

?

改進模塊

異步

運行將啟動本地異步 REPL。這樣就可以快速測試具有頂級代碼的代碼。不再需要直接調(diào)用,這將在每次調(diào)用時產(chǎn)生一個新的事件循環(huán):python -m asyncioawaitasyncio.run()

$ python -m asyncio asyncio REPL 3.8.0Use "await" directly instead of "asyncio.run()".Type "help", "copyright", "credits" or "license" for more information.>>> import asyncio>>> await asyncio.sleep(10, result='hello')hello

在 Windows 上,默認事件循環(huán)現(xiàn)在為 ProactorEventLoop

AST

AST 節(jié)點現(xiàn)在具有 end_lineno 和 end_col_offset 屬性,可以提供節(jié)點末端的精確位置。(這僅適用于具有 lineno 和 col_offset 屬性的節(jié)點。)

新函數(shù) ast.get_source_segment() 返回特定 AST 節(jié)點的源代碼。

該 ast.parse() 函數(shù)具有一些新標志:

  • type_comments=True 使它返回的文本 PEP 484 和 與某些 AST 節(jié)點相關(guān)聯(lián)的 PEP 526 類型注釋;
  • mode='func_type' 可以用來解析 PEP 484 “簽名類型注釋”(針對功能定義 AST 節(jié)點返回);
  • feature_version=(3, N)允許指定較早的 Python 3版本。(例如,將 和視為非保留字。)feature_version=(3, 4)asyncawait

集合

現(xiàn)在的 _asdict() 方法 collections.namedtuple() 返回 dict 而不是collections.OrderedDict。之所以可行,是因為自 3.7 以來,常規(guī)命令就保證了排序。如果需要的其他功能 OrderedDict,建議的補救措施是將結(jié)果轉(zhuǎn)換為所需的類型:OrderedDict(nt._asdict())。

日期時間

添加了新的備用構(gòu)造函數(shù)datetime.date.fromisocalendar()和 datetime.datetime.fromisocalendar(),分別從 ISO 年,周號和工作日構(gòu)造date和 datetime 對象;這些是每個類的 isocalendar 方法的反函數(shù)。如果大家對Python感興趣的話,可以加一下我們的學習交流摳摳群哦:649,825,285,免費領(lǐng)取一套學習資料和視頻課程喲~

GC

get_objects() 現(xiàn)在可以接收可選的生成參數(shù),該參數(shù)指示從中獲取對象的生成。

單元測試

  • 添加 AsyncMock 以支持的異步版本 Mock。還添加了用于測試的適當?shù)男聰嘌院瘮?shù)。
  • 已添加 addModuleCleanup() 和 addClassCleanup() 進行單元測試以支持對 setUpModule() 和的 清理 setUpClass()。
  • 現(xiàn)在,一些模擬斷言函數(shù)還會在失敗時打印實際調(diào)用的列表。
  • unittest 該模塊獲得了對協(xié)程的支持,可以與協(xié)程一起使用unittest.IsolatedAsyncioTestCase。

例:

import unittest class TestRequest(unittest.IsolatedAsyncioTestCase): async def asyncSetUp(self): self.connection = await AsyncConnection() async def test_get(self): response = await self.connection.get("https://example.com") self.assertEqual(response.status_code, 200) async def asyncTearDown(self): await self.connection.close()if __name__ == "__main__": unittest.main()

.........

其他

  • 在 macOS 上,默認情況下現(xiàn)在在多處理中使用 spawn start 方法
  • 現(xiàn)在,多處理(multiprocessing)可以使用共享內(nèi)存段
  • typed_ast 合并回 CPython
  • LOAD_GLOBAL 現(xiàn)在快了 40%
  • pickle 現(xiàn)在默認使用協(xié)議 4,提高了性能

?

新增、改進具體信息太多,詳細的我們就不一一給大家羅列了,小伙伴們可邊用邊自行查看官方文檔了解新改變(詳細信息地址:https://docs.python.org/3.8/whatsnew/changelog.html#changelog)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Python 3.8 稳定版正式发布,新特性全面解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。