Python 3.15

Python 3.15

💡 原文英文,约2400词,阅读约需9分钟。
📝

内容提要

Python 3.15发布,新增lazy关键字实现延迟导入,避免不必要的模块加载;标准库引入profiling模块,包含零开销统计分析器Tachyon;类型系统新增TypedDict的closed和extra_items参数、TypeForm及sentinel、frozendict内置类型;推导式支持解包语法。Ruff v0.17新增懒导入检查规则,默认Python版本升至3.11,移除ruff-lsp支持。Windows ARM64构建成为默认,性能提升15-20%。

🔎

延伸解读

懒导入的实用价值与迁移注意

Python 3.15 的 lazy 关键字允许将导入推迟到首次运行时使用,从而避免不必要的模块加载。这可以替代函数内导入和 TYPE_CHECKING 导入,让导入语句更符合 PEP 8 的顶部集中风格。但需注意,注解中的使用不会触发加载,而作为基类等运行时使用会立即加载。对于需兼容旧版本的项目,可使用 __lazy_modules__ 全局变量达到类似效果。

Tachyon 分析器:低开销与实时诊断

标准库新增的 profiling 模块包含确定性跟踪分析器 profiling.tracing 和统计采样分析器 Tachyon。Tachyon 在高达每秒百万次采样下仍几乎零开销,并能附加到运行中的应用而无需修改代码,适合诊断生产环境性能问题。示例中通过火焰图发现 count_elements 占 45.6% 样本,结合 Ruff 的 RUF017 建议改用推导式解包后,脚本运行时间从约 0.45 秒降至 0.22 秒。

类型系统增强:更精确的字典与类型注解

Python 3.15 为 TypedDict 引入 closed 和 extra_items 参数,closed=True 表示字典不会包含额外字段,使值迭代类型从 object 变为具体类型;extra_items 则允许为未列出的字段指定统一类型。此外,TypeForm 用于注解类型形式参数,sentinel 提供更清晰的哨兵对象表示,frozendict 提供不可变字典。这些特性在 typing-extensions 中也可用于旧版本,Ruff 和 ty 均已支持。

工具链更新与平台变化

Ruff v0.17 新增懒导入检查规则 TID254 和 TID255,并将默认 Python 版本从 3.10 升至 3.11,同时移除对 ruff-lsp 的支持。uv 新增预览功能使构建后端导入懒加载,基准测试中 wheel 构建速度提升达 18%。Windows ARM64 构建成为默认,性能提升 15-20%,且所有 ARM64 Windows 上的 Python 版本都将默认使用 ARM64 构建。Python 3.10 已结束支持。

❓

Q&A

Python 3.15 的 lazy 关键字有什么作用?

lazy 关键字用于延迟导入模块,避免在导入时立即加载模块,直到实际运行时才加载。它可以替代函数内导入和 TYPE_CHECKING 导入,让导入语句更集中。

Python 3.15 标准库新增的 profiling 模块包含哪些工具?

profiling 模块包含 profiling.tracing(从 cProfile 迁移的确定性函数调用跟踪分析器)和 profiling.sampling(新的统计采样分析器 Tachyon)。Tachyon 几乎零开销,可附加到运行中的程序。

Python 3.15 在类型系统方面有哪些新特性?

新增 TypedDict 的 closed 和 extra_items 参数、typing.TypeForm、内置 sentinel 类型和 frozendict 类型。这些特性也可通过 typing-extensions 在旧版本中使用。

Ruff v0.17 针对 lazy 导入新增了哪些规则?

新增 lazy-import-mismatch (TID254) 和 lazy-import-immediately-resolved (TID255) 规则。TID254 强制导入的懒加载策略,TID255 检测名义上懒加载但实际立即解析的导入。

Python 3.15 在推导式中支持解包语法吗?

是的,PEP 798 扩展了 * 和 ** 在推导式中的解包用法,例如 [*x for x in [[1,2,3],[4,5,6]]] 会展开为 [1,2,3,4,5,6]。

Python 3.15 对 Windows 用户有哪些性能提升?

Windows x86-64 构建使用 Clang 19 及以上版本编译,性能提升 15-20%。同时,Windows ARM64 构建成为默认,所有 Python 版本在 ARM64 Windows 上默认使用 ARM64 构建。

🏷️

标签

➡️

继续阅读