Python 3.6¶
Python 3.6 beta 1 已于 2016 年 9 月 12 日发布,新特性的概要可在此处找到:
新语法特性 |
状态 |
|
字面量字符串格式化 |
已完成 |
|
数字字面量中的下划线 |
已完成 |
|
异步生成器 |
||
变量注解语法(暂定) |
已完成 |
|
异步推导式 |
||
新内置特性 |
||
保留函数中 kwargs 的顺序 |
||
更简单的类创建定制 |
部分实现 [1] |
|
保留类属性定义顺序 |
||
标准库变更 |
||
本地时间消歧 |
||
向标准库添加 secrets 模块 |
||
添加文件系统路径协议 |
||
CPython 内部实现 |
||
为 dict 添加私有版本号 |
不会实现 |
|
向 CPython 添加帧求值 API |
||
Linux/Windows 变更 |
||
在 Linux 上使 |
||
将 Windows 控制台编码改为 UTF-8 |
||
将 Windows 文件系统编码改为 UTF-8 |
||
其他语言变更:
global 或 nonlocal 语句现在必须在同一作用域中受影响名称的首次使用之前,从文本上出现。此前这只是一个 SyntaxWarning。 |
|
现在可以将特殊方法设置为 None,以表示相应的操作不可用。例如,如果某个类将 __iter__() 设置为 None,则该类不可迭代。 |
|
现在,长串重复的回溯行会被缩写为 [Previous line repeated {count} more times] |
|
现在,当 import 无法找到模块时会抛出新的异常 ModuleNotFoundError。当前在 try-except 中检查 ImportError 的代码仍然有效。 |
|
依赖零参数 super() 的类方法,现在在类创建期间从元类方法中调用时也能正确工作。 |
内置模块的变更:
现在,即使被迭代的 array 被扩展,array.array 中已耗尽的迭代器仍将保持耗尽状态。 |
|
b2a_base64() 函数现在接受一个可选的 newline 关键字参数,用于控制是否在返回值后追加换行符 |
已完成 |
新增了 cmath.tau (τ) 常量 |
|
新增常量:cmath.inf 和 cmath.nan 以匹配 math.inf 和 math.nan,以及 cmath.infj 和 cmath.nanj 以匹配 complex repr 所用的格式 |
|
新增了 Collection 抽象基类,用于表示有大小的可迭代容器类 |
|
新的 Reversible 抽象基类表示同时提供了 __reversed__() 方法的可迭代类。 |
|
新的 AsyncGenerator 抽象基类表示异步生成器。 |
|
namedtuple() 函数现在接受一个可选的关键字参数 module,指定后将用于所返回命名元组类的 __module__ 属性。 |
|
namedtuple() 的 verbose 和 rename 参数现在为仅限关键字参数。 |
|
递归的 collections.deque 实例现在可以被 pickle。 |
|
向模块添加了 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.load() 和 json.loads() 现在支持二进制输入。编码后的 JSON 应使用 UTF-8、UTF-16 或 UTF-32 表示。 |
|
新增了 math.tau (τ) 常量 |
已完成 |
新的 close() 方法允许显式关闭 scandir() 迭代器。scandir() 迭代器现在支持上下文管理器协议。 |
|
在 Linux 上,os.urandom() 现在会阻塞,直到系统 urandom 熵池初始化完成,以提高安全性。 |
|
Linux 的 getrandom() 系统调用(获取随机字节)现在以新的 os.getrandom() 函数形式暴露出来。 |
|
新增了对正则表达式中修饰符作用域(modifier spans)的支持。例如:'(?i:p)ython' 匹配 'python' 和 'Python',但不匹配 'PYTHON';'(?i)g(?-i:v)r' 匹配 'GvR' 和 'gvr',但不匹配 'GVR'。 |
|
Match 对象的分组现在可以通过 __getitem__ 访问,这等价于 group()。因此 mo['name'] 现在等价于 mo.group('name')。 |
|
Match 对象现在支持将类索引对象用作分组索引。 |
|
ioctl() 函数现在支持 SIO_LOOPBACK_FAST_PATH 控制码。 |
|
现在支持 getsockopt() 常量 SO_DOMAIN、SO_PROTOCOL、SO_PEERSEC 和 SO_PASSSEC。 |
|
setsockopt() 现在支持 setsockopt(level, optname, None, optlen: int) 形式。 |
|
socket 模块现在支持地址族 AF_ALG,以便与 Linux 内核加密 API 对接。新增了 ALG_、SOL_ALG 和 sendmsg_afalg()。 |
|
新增了 Linux 常量 TCP_USER_TIMEOUT 和 TCP_CONGESTION。 |
|
ssl 支持 OpenSSL 1.1.0。推荐的最低版本为 1.0.2。 |
|
3DES 已从默认密码套件中移除,并新增了 ChaCha20 Poly1305 密码套件。 |
|
SSLContext 对选项和密码套件有了更好的默认配置。 |
|
借助新的 SSLSession 类,SSL 会话可以从一个客户端连接复制到另一个连接。TLS 会话恢复可以加快初始握手、降低延迟并提升性能。 |
|
新的 get_ciphers() 方法可用于按密码优先级顺序获取已启用密码套件的列表。 |
|
所有常量和标志都已转换为 IntEnum 和 IntFlags。 |
|
为 SSLContext 新增了服务器端和客户端专用的 TLS 协议。 |
|
新增了 SSLContext.post_handshake_auth 以启用,以及 ssl.SSLSocket.verify_client_post_handshake() 以发起 TLS 1.3 握手后认证。 |
|
现在通过 'e' 格式说明符支持 IEEE 754 半精度浮点数。 |
|
新的 getfilesystemencodeerrors() 函数返回用于在 Unicode 文件名和字节文件名之间转换的错误模式名称。 |
|
compress() 和 decompress() 函数现在接受关键字参数 |
|
注意事项