Python 从 3.6 到 3.12 的演进 | AI生成和翻译
问题:Python 从 3.6 版本到当前版本有哪些主要变化?
答案:
Python 从 3.6 版本(2016 年 12 月发布)到当前的稳定版本 3.12(截至 2025 年底,维护版本高达 3.12.8)已经发生了显著演变。这些变化侧重于改进语法、性能、类型支持、错误处理和标准库的优化,同时删除了已弃用的功能以使代码更整洁。以下是按版本划分的主要更新摘要,重点介绍了关键语言功能、库更改和性能改进。
Python 3.7 (2018 年 6 月)
- Data Class Decorators:引入了
@dataclass,用于简洁的类定义,带有自动方法,如__init__、__repr__和__eq__(PEP 557)。 - Type Hints:增加了对
typing.Dict[str, Any]等类型扩展的支持以及注解的延迟评估 (PEP 563)。 - Async Improvements:
async/await语法成为标准,asyncio得到了增强,以更好地处理协程。 - Performance:更快的属性访问和字典顺序保留。
- Library:
contextlib.asynccontextmanager用于异步上下文管理器。
Python 3.8 (2019 年 10 月)
- Positional-Only Parameters:在函数签名中使用
/来要求位置参数 (PEP 570)。 - Assignment Expressions:用于内联赋值的“海象运算符”
:=(PEP 572),例如if (x := len(s)) > 10:。 - f-string Improvements:允许在 f-string 中使用反斜杠和嵌套引号。
- Performance:通过专门的字典类型实现更快的启动和更少的内存使用。
- Library:
math.prod()和math.dist()用于乘积和距离计算;typing.Literal用于字面类型。
Python 3.9 (2020 年 10 月)
- Dictionary Union Operators:
|用于合并字典,例如{**a, **b}变为a | b(PEP 584)。 - Type Hints:
|用于联合类型 (PEP 604),例如str | int;泛型别名,如list[str]。 - Pattern Matching Setup:结构化模式匹配的初步工作(在 3.10 中最终确定)。
- Performance:更快的推导式和属性访问。
- Library:
zip()严格模式以防止提前终止;移除了一些无用的模块,如asynchat。
Python 3.10 (2021 年 10 月)
- Structural Pattern Matching:
match/case语句用于强大的类似 switch 的逻辑 (PEP 634),例如匹配元组或对象。 - Error Messages:更友好的回溯,带有建议,例如“Did you mean ‘list’?”。
- Type Hints:
typing.ParamSpec和Concatenate用于更好的函数类型跟踪。 - Performance:通过自适应解释器优化,速度提高了约 10-20%。
- Library:
str.removeprefix()和str.removesuffix();distutils的弃用(在 3.12 中移除)。
Python 3.11 (2022 年 10 月)
- Exception Groups:使用
ExceptionGroup和except*一次处理多个异常 (PEP 654)。 - Typing:
Self类型用于更好的方法类型;LiteralString及其他改进。 - Performance:通过新的 JIT 编译器和帧评估优化,执行速度提高了 25%。
- Error Messages:更好的诊断,包括回溯中的帧摘要。
- Library:
tomllib用于原生 TOML 解析;os.walk改进了递归目录遍历。
Python 3.12 (2023 年 10 月)
- Type Parameter Syntax:通过 PEP 695 简化泛型,例如
def func[T](x: T) -> T: ...而不是typing.TypeVar。 - F-string Enhancements:取消了限制,允许嵌套 f-string 和
f"{x=}"等表达式用于调试。 - Performance:不朽对象(例如
None)以减少引用计数开销;缓冲区协议优化。 - Error Messages:对无效转义的语法警告;改进的
Did you mean建议。 - Library:移除了已弃用的模块,如
distutils和smtpd;hashlib的安全升级;Linuxperf性能分析器支持。
总体趋势包括更强大的静态分析类型支持、性能提升(基准测试中 Python 3.12 比 3.6 快约 60%),以及在即将发布的版本(如 3.13)中推动实验性的自由线程(无 GIL)。来自 3.6 的代码大部分仍然兼容,但建议为现代项目更新以使用新功能和移除废弃功能。
参考资料:
- What’s New in Python
- Summary of Major Changes Between Python Versions
- The Best New Features in Python 3.12
- Python Changes 2014-2024