Python 3.9¶
Python 3.9.0(正式版)於 2020 年 10 月 5 日發布。3.9 的功能定義於 PEP 596,變更的詳細說明可在 What's New in Python 3.9 中找到
功能 |
狀態 |
|
從 C 擴充型別的方法快速存取模組狀態 |
不相關 |
|
為 dict 新增聯集運算子 |
已完成 [1] |
|
標準集合中的型別提示泛型 |
||
彈性的函式與變數註解 |
||
CPython 採用年度發布週期。並非以年度為目標,而是以兩個月的發布週期為目標 |
不相關 |
|
放寬對裝飾器的文法限制 |
||
IANA 時區資料庫現在以 zoneinfo 模組形式存在於標準函式庫中 |
||
用於移除前綴與後綴的字串方法 |
||
CPython 現在使用基於 PEG 的新剖析器 |
不相關 |
其他語言變更:
__import__() 現在會引發 ImportError 而非 ValueError |
已完成 |
Python 現在會取得命令列上所指定指令碼檔名的絕對路徑(例如:python3 script.py):__main__ 模組的 __file__ 屬性從相對路徑變成了絕對路徑 |
|
預設情況下,為了獲得最佳效能,errors 引數只在第一次編碼/解碼錯誤時才會檢查,且 encoding 引數對於空字串有時會被忽略 |
|
對於所有非零的 n,"".replace("", s, n) 現在會傳回 s 而非空字串。它現在與 "".replace("", s) 一致 |
|
現在任何有效的運算式都可作為裝飾器。先前的文法限制嚴格得多 |
|
現在禁止平行執行 aclose() / asend() / athrow(),且 ag_running 現在反映非同步產生器的實際執行狀態 |
|
呼叫 __iter__ 方法時的非預期錯誤,不再被 in 運算子以及 operator 模組的 contains()、indexOf() 與 countOf() 函式中的 TypeError 所遮蔽 |
|
在生成式與產生器運算式中,未加括號的 lambda 運算式不再能作為 if 子句的運算式部分 |
內建模組的變更:
由於重大的安全疑慮,asyncio.loop.create_datagram_endpoint() 的 reuse_address 參數不再受支援 |
|
新增了一個新協程 shutdown_default_executor(),它會排程關閉預設執行器,並等待 ThreadPoolExecutor 完成關閉。此外,asyncio.run() 也已更新為使用此新協程。 |
|
新增了 asyncio.PidfdChildWatcher,這是一個 Linux 特定的子行程監看器實作,會輪詢行程的檔案描述符 |
|
新增了一個新的 coroutine asyncio.to_thread() |
|
當因逾時而取消任務時,asyncio.wait_for() 現在即使在逾時 <= 0 的情況下也會等待取消完成,就如同正值逾時時的行為一樣 |
|
當以 ssl.SSLSocket socket 呼叫不相容的方法時,asyncio 現在會引發 TyperError |
|
垃圾回收不會在復活的物件上阻塞 |
|
新增了一個新函式 gc.is_finalized(),用來檢查某物件是否已被垃圾回收器終結 |
|
擴充了 math.gcd() 函式以處理多個引數。先前它只支援兩個引數 |
|
新增 math.lcm():傳回所指定引數的最小公倍數 |
|
新增 math.nextafter():傳回 x 朝向 y 之後的下一個浮點數值 |
|
新增 math.ulp():傳回浮點數最低有效位元的值 |
|
公開了 Linux 特定的 os.pidfd_open() 與 os.P_PIDFD |
|
os.unsetenv() 函式現在於 Windows 上也可用 |
已完成 |
os.putenv() 與 os.unsetenv() 函式現在一律可用 |
已完成 |
新增 os.waitstatus_to_exitcode() 函式:將 wait 狀態轉換為退出碼 |
|
新增了一個新的 random.Random.randbytes 方法:產生隨機位元組 |
|
新增了一個新的 sys.platlibdir 屬性:平台特定函式庫目錄的名稱 |
|
先前,sys.stderr 在非互動式時為區塊緩衝。現在 stderr 預設一律為行緩衝 |
|
註解