Python 3.6

Python 3.6 beta 1 於 2016 年 9 月 12 日發布,新功能摘要可在此處找到:

新語法功能

狀態

PEP 498

字面字串格式化

已完成

PEP 515

數值字面值中的底線

已完成

PEP 525

非同步產生器

PEP 526

變數註解語法(暫定)

已完成

PEP 530

非同步生成式

新內建功能

PEP 468

保留函式中 kwargs 的順序

PEP 487

更簡單的類別建立自訂方式

部分支援 [1]

PEP 520

保留類別屬性定義順序

標準函式庫變更

PEP 495

本地時間消歧義

PEP 506

在標準函式庫中加入 secrets 模組

PEP 519

加入檔案系統路徑協定

CPython 內部機制

PEP 509

為 dict 加入私有版本號

不會實作

PEP 523

為 CPython 加入影格評估 API

Linux/Windows 變更

PEP 524

os.urandom() 在 Linux 上(系統啟動期間)會阻塞

PEP 528

將 Windows 主控台編碼改為 UTF-8

PEP 529

將 Windows 檔案系統編碼改為 UTF-8

其他語言變更:

globalnonlocal 陳述式現在必須在文字上出現於同一作用域中受影響名稱第一次使用之前。先前這只是一個 SyntaxWarning。

現在可以將特殊方法設為 None,以表示對應的操作不可用。例如,若某類別將 __iter__() 設為 None,則該類別不可迭代。

重複的回溯行若連續出現過長,現在會被縮寫為 [Previous line repeated {count} more times]

當 import 找不到模組時,現在會引發新例外 ModuleNotFoundError。目前在 try-except 中檢查 ImportError 的程式碼仍可正常運作。

在類別建立期間,從 metaclass 方法呼叫時,依賴零引數 super() 的類別方法現在能正確運作。

內建模組的變更:

array

已耗盡的 array.array 迭代器現在即使所迭代的陣列被擴充,仍會維持耗盡狀態。

binascii

b2a_base64() 函式現在接受一個可選的 newline 關鍵字引數,用來控制是否在傳回值後附加換行字元

已完成

cmath

新增了 cmath.tau (τ) 常數

新增常數:cmath.infcmath.nan 以對應 math.infmath.nan,並新增 cmath.infjcmath.nanj 以對應複數 repr 所用的格式

collections

新增了 Collection 抽象基底類別,用來表示具有大小的可迭代容器類別

新增的 Reversible 抽象基底類別表示同時也提供 __reversed__() 方法的可迭代類別。

新增的 AsyncGenerator 抽象基底類別表示非同步產生器。

namedtuple() 函式現在接受一個可選的 module 關鍵字引數,若指定,會用於所傳回具名元組類別的 __module__ 屬性。

namedtuple() 的 verbose 與 rename 引數現在僅限關鍵字。

遞迴的 collections.deque 實例現在可被 pickle。

hashlib

模組中新增了 BLAKE2 雜湊函式。blake2b()blake2s() 一律可用,並支援 BLAKE2 的完整功能集。

新增了 SHA-3 雜湊函式 sha3_224()sha3_256()sha3_384()sha3_512(),以及 SHAKE 雜湊函式 shake_128()shake_256()

基於密碼的金鑰衍生函式 scrypt() 現在於 OpenSSL 1.1.0 及更新版本中可用。

json

json.load()json.loads() 現在支援二進位輸入。編碼後的 JSON 應使用 UTF-8、UTF-16 或 UTF-32 表示。

math

新增了 math.tau (τ) 常數

已完成

os

新的 close() 方法可明確關閉 scandir() 迭代器。scandir() 迭代器現在支援情境管理器協定。

在 Linux 上,os.urandom() 現在會阻塞直到系統 urandom 熵池初始化完成,以提高安全性。

Linux 的 getrandom() 系統呼叫(取得隨機位元組)現在透過新的 os.getrandom() 函式公開。

re

新增對正規表示式中修飾範圍的支援。範例:'(?i:p)ython' 可匹配 'python' 與 'Python',但不匹配 'PYTHON';'(?i)g(?-i:v)r' 可匹配 'GvR''gvr',但不匹配 'GVR'

Match 物件的群組現在可透過 __getitem__ 存取,等同於 group()。因此 mo['name'] 現在等同於 mo.group('name')

Match 物件現在支援以類似索引的物件作為群組索引。

socket

ioctl() 函式現在支援 SIO_LOOPBACK_FAST_PATH 控制碼。

現在支援 getsockopt() 常數 SO_DOMAINSO_PROTOCOLSO_PEERSECSO_PASSSEC

setsockopt() 現在支援 setsockopt(level, optname, None, optlen: int) 形式。

socket 模組現在支援位址族 AF_ALG,以介接 Linux 核心的 crypto API。新增了 ALG_SOL_ALGsendmsg_afalg()

新增了 Linux 常數 TCP_USER_TIMEOUTTCP_CONGESTION

ssl

ssl 支援 OpenSSL 1.1.0。建議的最低版本為 1.0.2。

3DES 已從預設密碼套件中移除,並新增了 ChaCha20 Poly1305 密碼套件。

SSLContext 對選項與密碼有更好的預設組態。

SSL 工作階段現在可透過新的 SSLSession 類別從一個用戶端連線複製到另一個。TLS 工作階段恢復可加快初始交握、降低延遲並提升效能。

新的 get_ciphers() 方法可用來依密碼優先順序取得已啟用密碼的清單。

所有常數與旗標都已轉換為 IntEnumIntFlags

新增了適用於 SSLContext 的伺服器端與用戶端特定 TLS 協定。

新增了 SSLContext.post_handshake_auth 以啟用,以及 ssl.SSLSocket.verify_client_post_handshake() 以發起 TLS 1.3 交握後驗證。

struct

現在透過 'e' 格式指示符支援 IEEE 754 半精度浮點數。

sys

新的 getfilesystemencodeerrors() 函式會傳回用於在 Unicode 檔名與位元組檔名之間轉換時所使用的錯誤模式名稱。

zlib

compress()decompress() 函式現在接受關鍵字引數

註解