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

更简单的自定义类创建

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

其他语言变化:

*全局*或*非局部*语句现在必须在文本上出现在同一作用域中受影响的名称的第一次使用之前。以前这是一个SyntaxWarning。

现在可以将一个特殊的方法设置为None,以表示相应的操作不可用。例如,如果一个类将 __iter__() 设置为 None ,则该类不可迭代。

长序列的重复回溯行现在缩写为*[前一行重复{count}多次]*

Import现在在找不到模块时引发新的异常*ModuleNotFoundError*。当前检查 ImportError (在try-except中)的代码仍然可以工作。

依赖于零参数的类方法*super()*将在创建类期间从元类方法调用时正确工作。

对内置模块的更改:

array

已耗尽的*array.array*现在将保持耗尽状态,即使迭代数组被扩展。

binascii

b2a_base64()函数现在接受一个可选的换行关键字参数来控制是否将换行字符附加到返回值

完成

cmath

添加了新的cmath.tau (τ) 常数

新常量:cmath.inf*和*cmath.nan*用于匹配*math.inf*和*math.nan,还有*cmath.infj*和*cmath.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()*现在阻塞,直到系统随机熵池初始化以增加安全性。

Linux getrandom() sycall(获取随机字节)现在公开为新的*os.getrandom()*函数。

re

添加了对正则表达式中修饰符跨度的支持。例如:’(?i:p)ython’ 匹配’python’和 ‘Python’,但不匹配’PYTHON’;’(?i)g(?-i:v)r’ 匹配 ‘GvR’‘gvr’,但不匹配 ‘GVR’

匹配对象组可以由 __getitem__*访问,相当于*group()。所以*mo[‘name’]*现在等价于*mo.group(‘name’)*。

Match对象现在支持将类似索引的对象作为组索引。

socket

*ioctl()*函数现在支持*SIO_LOOPBACK_FAST_PATH*控制代码。

现在支持*getsockopt()*常量*SO_DOMAIN* ,SO_PROTOCOLSO_PEERSEC*和*SO_PASSSEC

setsockopt()*现在支持 *setsockopt(level, optname, None, optlen: int) 形式。

套接字模块现在支持地址系列*AF_ALG*与Linux内核加密API接口。添加了*ALG_*、SOL_ALG*和*sendmsg_afalg()

新增Linux常量 TCP_USER_TIMEOUTTCP_CONGESTION

ssl

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握手后认证。

struct

现在通过 ‘e’格式说明符支持IEEE 754半精度浮点数。

sys

新的*getfilesystemencodeerrors()*函数返回用于在Unicode文件名和字节文件名之间进行转换的错误模式的名称。

zlib

compress() 和*decompress()*函数现在接受关键字参数