Python 3.8¶
Python 3.8.0(正式版)於 2019 年 10 月 14 日發布。3.8 的功能定義於 PEP 569,變更的詳細說明可在 What's New in Python 3.8. 中找到
功能 |
狀態 |
|
僅限位置引數 |
||
賦值運算式 |
已完成 |
|
帶頻外資料的 Pickle 協定 5 |
||
執行階段稽核掛鉤 |
||
Python 初始化組態 |
||
Vectorcall:CPython 的快速呼叫協定 |
||
雜項 |
||
f-string 支援 = 用於自我說明的運算式與除錯 |
已完成 |
|
其他語言變更:
由於實作上的問題,continue 陳述式過去在 finally 子句中是非法的。在 Python 3.8 中此限制已解除 |
已完成 |
bool、int 與 fractions.Fraction 型別現在擁有如同 float 與 decimal.Decimal 中的 as_integer_ratio() 方法 |
|
int、float 與 complex 的建構函式現在會使用 __index__() 特殊方法(如果可用),且對應的 __int__()、__float__() 或 __complex__() 方法不可用時 |
|
新增對正規表示式中 N{name} 跳脫的支援 |
|
現在可使用 reversed() 以反向插入順序迭代 dict 與 dictviews |
|
函式呼叫中關鍵字名稱所允許的語法受到進一步限制。特別是不再允許 f((keyword)=arg) |
|
yield 與 return 陳述式中的廣義可迭代解包不再需要外層括號 |
|
當程式碼如 [(10, 20) (30, 40)] 中遺漏逗號時,編譯器會顯示帶有實用建議的 SyntaxWarning |
|
datetime.date 或 datetime.datetime 的子類別與 datetime.timedelta 物件之間的算術運算現在會傳回該子類別的實例,而非基底類別 |
|
當 Python 直譯器被 Ctrl-C (SIGINT) 中斷,且產生的 KeyboardInterrupt 例外未被攔截時,Python 行程現在會透過 SIGINT 訊號退出,或以正確的退出碼退出,使呼叫端行程能偵測到它是因 Ctrl-C 而結束 |
|
某些進階的程式設計風格需要更新既有函式的 types.CodeType 物件 |
|
對於整數,在底數與模數互質的情況下,pow() 函式的三引數形式現在允許指數為負 |
|
Dict 生成式已與 dict 字面值同步,使得先計算鍵、再計算值 |
|
object.__reduce__() 方法現在可傳回長度為二到六個元素的元組 |
內建模組的變更:
asyncio.run() 已從暫定 API 升級為穩定 API |
已完成 |
執行 python -m asyncio 會啟動原生的非同步 REPL |
|
例外 asyncio.CancelledError 現在繼承自 BaseException 而非 Exception,且不再繼承自 concurrent.futures.CancelledError |
已完成 |
新增 asyncio.Task.get_coro() 以取得 asyncio.Task 內所包裝的協程 |
|
Asyncio 任務現在可被命名,可透過將 name 關鍵字引數傳遞給 asyncio.create_task() 或事件迴圈的 create_task() 方法,或在任務物件上呼叫 set_name() 方法 |
|
為 asyncio.loop.create_connection() 新增了 Happy Eyeballs 支援。為指定其行為,新增了兩個參數:happy_eyeballs_delay 與 interleave。 |
|
get_objects() 現在可接收一個可選的 generation 參數,用來指示要從哪一個世代取得物件。(不過請注意,雖然 gc 是內建的,但 MicroPython 並未實作 get_objects()) |
|
新增了新函式 math.dist(),用於計算兩點之間的歐幾里得距離 |
|
擴充了 math.hypot() 函式以處理多個維度 |
|
新增了新函式 math.prod(),作為類似 sum() 的函式,會傳回一個「起始」值(預設:1)乘以一個可迭代數列的乘積 |
|
新增了兩個新的組合數學函式 math.perm() 與 math.comb() |
|
新增了新函式 math.isqrt(),用於在不轉換為浮點數的情況下計算精確的整數平方根 |
|
math.factorial() 函式不再接受非類整數的引數 |
已完成 |
新增 sys.unraisablehook() 函式,可被覆寫以控制「不可引發例外」的處理方式 |
|