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

重新设计扩展模块加载

其他语言变化:

增加了*nameeplace *错误处理程序。*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

数学模块中增加了两个新的常量:inf*和*nan

完成

一个新的函数 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()*函数返回每个传递的pathname的最长公共子路径

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() 函数现在总是可用的

笔记