likes
comments
collection
share

[译] Python 3.7 新特性

作者站长头像
站长
· 阅读数 12

Python 3.7 新特性

  • 版本:3.7.0a1
  • 日期:2017年9月27日

本文阐述了Python 3.7所具有的新特性(与3.6版本对比)。

详见更新日志

注意: 预发布版本的用户要留意,本文档目前还属于草案。随着Python 3.7的发布,后续将会有很显著的更新,所以即使阅读过早期版本,也值得再回来看看。

版本亮点总结

新特性

PEP 538:遗留的C语言本地化编码自动强制转换问题

在 Python 3 系列版本中,确定一个合理的默认策略来处理当前位于非 Windows 平台上默认C语言本地化编码隐式采用的“7位 ASCII”,是个永不停歇的挑战。

PEP 538 更新了默认的解释器命令行界面,从而能自动地将本地化编码强制转换为一种可用的且基于 UTF-8的编码,它就是文档里所描述的新环境变量 PYTHONCOERCECLOCALE。用这种方式自动设置 LC_CTYPE 意味着核心解释器和关于本地化识别的C语言扩展(如 readline)将会采用 UTF-8 作为默认的文本编码,而不是 ASCII。

PEP 11 中有关平台支持的定义也已经更新,限制了对于全文处理的支持,变为适当的基于非 ASCII 的本地化编码配置。

作为变化的一部分,当使用任一强制转换的已定义目标编码(当前为 C.UTF-8C.utf8UTF-8),stdinstdout 的默认错误处理器现在为 surrogateescape(而不是 strict);而 stderr 的默认错误处理器仍然是 backslashreplace,与语言环境无关。

默认的本地化编码强制转换是隐式的,但是为了能帮助调试潜在的与本地化相关的集成问题,可以通过设置 PYTHONCOERCECLOCALE=warn 来请求直接用 stderr 发出明确的警告。当核心解释器初始化时,如果遗留的C语言本地化编码仍是活动状态,那么该设置会导致 Python 运行时发出警告。

另见: