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 Launcher 能够识别虚拟环境

不相关

PEP 484

类型提示(仅供参考)

完整支持 [1]

PEP 488

取消 PYO 文件

不相关

PEP 489

重新设计扩展模块的加载方式

其他语言变更:

添加了 namereplace 错误处理程序。backslashreplace 错误处理程序现在可用于解码和转译。

属性(property)的文档字符串现在可写。这对 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

现在可以通过在新增的可选 key 关键字参数中传入一个 key 函数来自定义 merge() 中的元素比较,还可以使用新增的可选 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。

根据 RFC 5280,cert_time_to_seconds() 函数现在将输入时间解释为 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() 函数现在始终可用。

注释