Python 3.5

以下是 Python 3.5 已定案/已接受的 PEP 清單,依其對 MicroPython 的影響分組。

語法的擴充

狀態

PEP 448

額外的解包泛化

部分

PEP 465

新的矩陣乘法運算子

完整

PEP 492

使用 asyncawait 語法的協程

完整

執行時的擴充與變更

PEP 461

二進位字串的 % 格式化

完整

PEP 475

重試以 EINTR 失敗的系統呼叫

完整

PEP 479

變更產生器內部的 StopIteration 處理

完整

標準函式庫變更

PEP 471

os.scandir()

PEP 485

math.isclose(),一個用於測試近似相等的函式

完整

雜項變更

PEP 441

改進的 Python zip 應用程式支援

PEP 486

讓 Python 啟動器能識別虛擬環境

不相關

PEP 484

型別提示(僅供參考)

完整 [1]

PEP 488

消除 PYO 檔案

不相關

PEP 489

重新設計擴充模組載入

其他語言變更:

新增了 namereplace 錯誤處理器。backslashreplace 錯誤處理器現在可用於解碼與轉譯。

屬性的文件字串現在可寫入。這對於 collections.namedtuple() 的文件字串特別有用

現在支援涉及相對匯入的循環匯入。

新模組:

內建模組的變更:

collections

OrderedDict 類別現在以 C 語言實作,使其速度快 4 至 100 倍。

OrderedDict.items()OrderedDict.keys()OrderedDict.values() 檢視現在支援 reversed() 迭代。

deque 類別現在定義了 index()insert()copy(),並支援 + 與 * 運算子。

namedtuple() 所產生的文件字串現在可以更新。

UserString 類別現在實作了 __getnewargs__()__rmod__()casefold()format_map()isprintable()maketrans() 方法,以對應 str 的相應方法。

heapq

merge() 中的元素比較現在可透過在新的選用 key 關鍵字引數中傳入 key 函式來自訂,而新的選用 reverse 關鍵字引數可用於反轉元素比較

io

新增 BufferedIOBase.readinto1() 方法,它最多對底層原始串流的 RawIOBase.read()RawIOBase.readinto() 方法呼叫一次

json

JSON 解碼器現在會引發 JSONDecodeError 而非 ValueError,以提供關於錯誤的更佳上下文資訊。

math

math 模組新增了兩個常數:infnan

完整

新增的 isclose() 函式提供了測試近似相等的方法。

新增了 gcd() 函式。fractions.gcd() 函式現已棄用。

os

新增了 scandir() 函式,它傳回 DirEntry 物件的迭代器。

urandom() 函式現在在 Linux 3.17 或更新版本上使用 getrandom() 系統呼叫,並在 OpenBSD 5.6 及更新版本上使用 getentropy(),省去了使用 /dev/urandom 的需要並避免因潛在的檔案描述子耗盡而導致的失敗。

新增的 get_blocking()set_blocking() 函式允許取得與設定檔案描述子的封鎖模式(O_NONBLOCK)。

新增了 os.path.commonpath() 函式,傳回各傳入路徑名稱中最長的共同子路徑

re

現在於後行斷言中允許對固定長度群組的參考與條件參考

正規表示式中擷取群組的數量不再限制為 100 個。

sub()subn() 函式現在以空字串取代未比對到的群組,而非引發例外。

re.error 例外具有新的屬性 msg、pattern、pos、lineno 與 colno,可提供關於錯誤的更佳上下文資訊

socket

具有逾時的函式現在使用單調時鐘,而非系統時鐘。

新增的 socket.sendfile() 方法允許透過在 UNIX 上使用高效能的 os.sendfile() 函式來透過通訊端傳送檔案,使上傳速度比使用普通的 socket.send() 快 2 至 3 倍

socket.sendall() 方法不再於每次接收或傳送位元組時重設通訊端逾時。通訊端逾時現在是傳送所有資料的最大總時長。

socket.listen() 方法的 backlog 引數現在是選用的。預設會設為 SOMAXCONN 或 128,取較小者。

完整

ssl

記憶體 BIO 支援

應用層協定協商支援

新增的 SSLSocket.version() 方法可查詢實際使用中的協定版本。

SSLSocket 類別現在實作了 SSLSocket.sendfile() 方法。

SSLSocket.send() 方法現在於非封鎖通訊端上,若操作會造成封鎖,便會引發 ssl.SSLWantReadErrorssl.SSLWantWriteError 例外。先前它會傳回 0。

cert_time_to_seconds() 函式現在依 RFC 5280 將輸入時間解讀為 UTC 而非當地時間。此外,傳回值一律為 int。

新增的 SSLObject.shared_ciphers()SSLSocket.shared_ciphers() 方法傳回用戶端在握手期間所傳送的加密套件清單。

SSLSocket 類別的 SSLSocket.do_handshake()SSLSocket.read()SSLSocket.shutdown()SSLSocket.write() 方法不再於每次接收或傳送位元組時重設通訊端逾時。

match_hostname() 函式現在支援 IP 位址的比對。

sys

新增的 set_coroutine_wrapper() 函式允許設定一個全域掛鉤,每當 async def 函式建立協程物件時便會被呼叫。相應的 get_coroutine_wrapper() 可用於取得目前所設定的包裝器。

新增的 is_finalizing() 函式可用於檢查 Python 直譯器是否正在關閉。

time

monotonic() 函式現在一律可用

備註