内容提要
Python 3.14 发布,新增可检查插值内容的模板字符串(t-strings);自由线程(无 GIL)版本转为正式支持,但单线程性能略降、内存增约 10%;Clang 构建的解释器性能提升 3-5%;finally 中使用 return 等将触发警告;ByteString 弃用延至 3.17;REPL 增强;Python 3.9 已停止支持。
延伸解读
自由线程构建的现状与影响
Python 3.14 的自由线程(无 GIL)版本已从实验性转为正式支持,但仍为可选构建。它允许更好的多线程并发,但当前存在单线程性能下降和内存使用增加约 10% 的代价。uv 现在允许在虚拟环境或 PATH 中直接使用 Python 3.14+ 自由线程解释器,无需额外选择加入,但安装 Python 时默认仍为常规构建。
Clang 构建带来的性能提升
Python 3.14 引入了一种基于尾调用的新解释器,在 pyperformance 基准测试中性能提升 3-5%。该解释器目前仅支持使用 Clang 19+ 构建 Python。由于 python-build-standalone 使用 Clang 编译,uv 用户在常见架构上使用托管版本的 Python 3.14 时,应能获得这一额外性能提升。
finally 子句中的控制流警告
在 try-except 的 finally 子句中使用 return、break 或 continue 现在会触发 SyntaxWarning。这些语句会阻止 except 中看似重新抛出的异常被实际重新抛出,也可能吞掉 except 中的 return。Ruff 已有规则 B012 可检测此类问题,但默认未启用,建议在项目中启用,以避免意外行为并提前适应 Python 3.14+ 的警告。
ByteString 弃用延期与迁移建议
typing.ByteString 和 collections.abc.ByteString 自 Python 3.9 起已弃用,原计划在 3.14 移除,但因弃用警告不够显著,移除已推迟至 Python 3.17。推荐使用 collections.abc.Buffer(Python 3.12+)或 typing_extensions.Buffer 回退,也可用 bytes | bytearray | memoryview 联合类型。Ruff 的 PYI057 规则可标记 ByteString 的使用,建议启用以准
Q&A
Python 3.14 中的模板字符串(t-strings)是什么?和 f-string 有什么区别?
模板字符串(t-strings)是 Python 3.14 新增的特性,基于 f-string 语法,但运行时求值为 string.templatelib.Template 类型,而非普通的 str。这使得使用者可以访问更多信息,例如分离静态部分和检查插值内容。
Python 3.14 的自由线程(无 GIL)版本现在是什么状态?有什么限制?
自由线程(无 GIL)版本在 Python 3.14 中不再被视为实验性,已进入 PEP 779 定义的第二阶段,即获得完全官方支持但仍为可选构建。当前限制包括单线程性能下降和内存使用增加约 10%。
Python 3.14 在性能方面有哪些改进?
Python 3.14 引入了一种基于尾调用的新解释器,在使用 Clang 19+ 构建时,pyperformance 基准测试显示性能提升 3-5%。此外,自由线程构建在多线程工作负载中性能应有所改善。
在 Python 3.14 中,在 finally 子句中使用 return 会有什么后果?
在 finally 子句中使用 return、break 或 continue 会触发 SyntaxWarning,并且会阻止 except 子句中重新抛出的异常被实际重新抛出,甚至吞掉 except 子句中的 return 语句。
typing.ByteString 在 Python 3.14 中的状态如何?应该用什么替代?
typing.ByteString 和 collections.abc.ByteString 自 Python 3.9 起已弃用,原计划在 3.14 移除,但现已推迟到 Python 3.17。推荐使用 collections.abc.Buffer(Python 3.12+)或 typing_extensions.Buffer 回退,也可以使用 bytes | bytearray | memoryview 联合类型。
Python 3.14 的 REPL 有哪些新功能?
Python 3.14 的 REPL 在 3.13 的改进基础上,新增了语法高亮和导入自动补全功能,并引入了新的 functools.Placeholder 和 concurrent.futures.InterpreterPoolExecutor API。
Python 3.9 停止支持对 Ruff 和 uv 有什么影响?
Python 3.9 已停止支持,Ruff v0.14 将默认 Python 版本从 3.9 提升到 3.10(仅当未指定 target-version 或 requires-python 时生效),但 Ruff 的最低支持版本仍为 Python 3.7。uv 将继续支持 Python 3.9,但最终版本后不再发布额外构建。