本文解释了 Python 3.7 相比 3.6 的新增特性。Python 3.7 于 2018 年 6 月 27 日发布。完整的详情可参阅 更新日志。
新的语法特性:
- PEP 563,类型标注延迟求值。
向后不兼容的语法更改:
新的库模块:
新的内置特性:
-
PEP 553, 新的
breakpoint()
函数。
对 Python 数据模型的改进:
标准库中的重大改进:
CPython 实现的改进:
- 避免使用 ASCII 作为默认的文本编码:
- PEP 552,确定性的 .pyc 文件
- 新的开发运行时模式
-
PEP 565,改进的
DeprecationWarning
处理
C API 的改进:
- PEP 539,用于线程本地存储的新 C API
文档的改进:
此版本在诸多方面有显著的性能改进。性能优化 章节详细列出了它们。
和之前的 Python 版本存在兼容性的更改列表,请参阅 移植到 Python 3.7 章节。
PEP 563,类型标注延迟求值
# 不带类型注解
def foo(bar, baz):
###
def foo(bar: str, baz: int) -> 'return int':
# 标注延迟求值
from __future__ import annotations
其他新特性
- 字典现在保持插入顺序。这在 3.6 中是非正式的,但现在成为了官方语言规范。在大多数情况下,普通的 dict 能够替换 collections.OrderedDict。
- .pyc 文件具有确定性,支持可重复构建 —— 也就是说,总是为相同的输入文件生成相同的 byte-for-byte 输出。
- 新增contextvars模块,针对异步任务提供上下文变量。
- main中的代码会显示弃用警告(DeprecationWarning)。
- 新增UTF-8模式。在Linux/Unix系统,将忽略系统的locale,使用UTF-8作为默认编码。在非Linux/Unix系统,需要使用-X utf8选项启用UTF-8模式。
- 允许模块定义getattr、dir函数,为弃用警告、延迟import子模块等提供便利。
- 新的线程本地存储C语言API。
- 更新Unicode数据到11.0。
网友评论