[译] Python 3.7 新特性
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-8
,C.utf8
和 UTF-8
),stdin
及 stdout
的默认错误处理器现在为 surrogateescape
(而不是 strict
);而 stderr
的默认错误处理器仍然是 backslashreplace
,与语言环境无关。
默认的本地化编码强制转换是隐式的,但是为了能帮助调试潜在的与本地化相关的集成问题,可以通过设置 PYTHONCOERCECLOCALE=warn
来请求直接用 stderr
发出明确的警告。当核心解释器初始化时,如果遗留的C语言本地化编码仍是活动状态,那么该设置会导致 Python 运行时发出警告。
另见:
转载自:https://juejin.cn/post/6844903512560631821