欢迎光临
我们一直在努力

Python 3.15.0 final 正式发布,3.10 谢幕(文末有彩蛋)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

Python 3.15.0 final 正式发布,3.10 谢幕

python-3.15-logo

一次发布,一次退役

3.10 已于 2026-10-01 走完生命周期:3.10.22 是最后一个版本,只做安全修复、只发源码包(3.10.11 是最后一个带二进制安装包的版本),PEP 619 规定的支持周期就此结束,3.11 还剩约一年的安全修复期。发布经理 Pablo Galindo Salgado 在公告里以"黑洞的 ringdown(铃振)"作别 —— 毕竟 3.10 的发布公告正是从一次"坠入史瓦西黑洞"开始的。

lazy import(PEP 810)、frozendict(PEP 814)与 Tachyon 采样分析器(PEP 799)已在笔者之前的三篇前瞻文章中展开,这里不再重复。

Tachyon Lazy Import frozendict

下面看 3.15 其余的变化。

语言与内置类型

sentinel(PEP 661) 新增 sentinel 内置类型,用来创建唯一的"缺失值"标记,替代过去惯用的模块级 object()。它 repr 友好、复制后身份不变、可参与 | 类型表达式,并在以"模块名+变量名"可导入时可被 pickle。

MISSING = sentinel("MISSING")
def get_option(options, name, default=MISSING):
value = options.get(name, default)
if value is MISSING:
raise KeyError(name)
return value

print(get_option({"retries": None}, "retries")) # None
print(get_option({}, "timeout", default=None)) # None
get_option({}, "timeout") # KeyError: 'timeout'

最后两行查的是同一个缺失键:显式传 default=None 得到 None,省略则抛 KeyError——这正是把 None 当默认值时无法区分的。

推导式解包(PEP 798) 让 * / ** 可直接用在推导式里,展平嵌套列表不再需要双 for 或 itertools.chain()。

daily = [[18.2, 21.7], [17.9], [19.4, 23.1]]
[*temps for temps in daily] # [18.2, 21.7, 17.9, 19.4, 23.1]
{**c for c in [{"host": "db.local"}, {"port": 5432}]} # {'host': 'db.local', 'port': 5432}
max(*temps for temps in daily) # 23.1

这一想法在 PEP 448 初稿中就有,因可读性争议被搁置十年,如今由 PEP 798 补上。

开发者体验

  • 更聪明的报错:AttributeError 能提示"下钻一层"的属性(.customer.email),也能识别来自 JavaScript / Java / C# / Ruby 用户的习惯写法(list.push → Did you mean '.append'?,dict.put → Use d[k] = v);模块名拼错给出拼写建议(pathilb → pathlib);没有 match 的 case 也有了明确诊断。这些建议在渲染 traceback 时才注入,str(e) 本身并不包含。
  • UTF-8 成为默认编码(PEP 686):open() 不再跟随系统 locale,rc3 实测 sys.flags.utf8_mode == 1、locale.getpreferredencoding() 返回 utf-8。注意这会改变旧文件的读取行为,升级前建议确认历史文件编码。
  • 终端更多颜色:argparse、python –help、calendar、sqlite3 壳等近二十个命令行工具都上了色,difflib.unified_diff() 与 ast.dump() 新增可选 color 参数;NO_COLOR 可关闭。
  • REPL 更友好:Tab 补全能列出 from collections import 下的名字并按类别着色;在 REPL 里敲 pip install 会提示"pip 只能在 REPL 外使用"。

性能

  • JIT 升级:实验性 JIT 换用新的 tracing 前端,官方基准几何平均提速:x86-64 Linux 上 7%~8%,AArch64 macOS 上 11%~12%。它仍默认关闭,可用 PYTHON_JIT=1 开启。
  • Windows tail-calling 解释器:官方 64 位 Windows 安装包改用 Visual Studio 2026 编译,主循环以尾调用串联字节码,文档称标准基准提速 15%~20%、真实纯 Python 代码 14%~40%。
  • 帧指针默认开启(PEP 831):默认带 -fno-omit-frame-pointer 构建,让 perf、eBPF 等系统级工具更容易拿到完整栈。

另一处"变化"是回退:3.14 引入的增量 GC 因内存压力被撤回,3.15 沿用 3.13 的分代收集器;free-threaded 构建则迎来稳定 ABI abi3t。

类型系统与标准库零碎

  • TypeForm(PEP 747):让"接收类型并返回该类型实例"的函数可以标注 int | None、list[int] 这类类型表达式,而不只是 type[T]。
  • TypedDict 的 closed / extra_items(PEP 728):前者禁止多余键,后者允许任意键但约束值类型。
  • 标准库:新增 math.integer、math.fmax/fmin、math.signbit(区分 -0.0);re.prefixmatch();json.loads(…, array_hook=tuple);tomllib 支持 TOML 1.1 尾随逗号;unicodedata.iter_graphemes()(按"用户感知字符"切分,一面国旗算一个);bytearray.take_bytes();Counter 支持 ^ 对称差。

官方彩蛋:whatsnewt

python-3.15-whatsnewt

本次新版本发布的彩蛋是核心开发者 Barry Warsaw 做的 TUI 文字冒险 whatsnewt:你从解释器内部的"Startup Foyer"醒来,一路走到 “Release Gate”,沿途 18 个谜题、6 枚印记,每关都要在 3.15 解释器里真的写并运行代码;涉及类型的谜题由类型检查器 pyrefly 判定。一行即可开玩:uvx –python 3.15 whatsnewt(官方还提示有 easter eggs)。首关 “Startup Foyer” 讲的正是 PEP 829:满墙 .pth 文件、少数带 import 者"留有焦痕"(暗示其已弃用),讲台上那页"尚未写下的新文件"即新增的 .start 配置文件。

要不要升级

3.15 新语法是纯增量,最需留意 UTF-8 默认值对旧文件的影响,以及若干收紧的接口(sqlite3.connect() 除路径外全部改为仅关键字、缺年份的日期解析改为报错等)。个人脚本与 CLI 可直接上;生产环境建议等 3.15.1 与依赖 wheels 到位。

参考

  • Python 3.15 What’s New
  • Real Python: Python 3.15 New Features
  • Python 3.10.22 发布说明
  • Python 3.15 发布排期
赞(0)
未经允许不得转载:171主机测评 » Python 3.15.0 final 正式发布,3.10 谢幕(文末有彩蛋)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址