Python 3.15 正式发布:JIT 编译器升级、lazy imports 落地,12 个必知新特性

2026 年 10 月 9 日,Python 3.15 正式发布。这不是一次普通的版本号跳跃——它是 Python 历史上第一次默认开启 JIT 编译器的稳定版本、第一次把 frozendict 和 sentinel 提升为内建类型、第一次让 UTF-8 真正成为默认编码。三年磨一剑的 PEP 810(lazy imports)也终于落地。

本文扒 Python 3.15 官方 What’s New 文档 + Real Python 的实战解读 + Phoronix 的 benchmark 数据,把这 12 个最值得知道的新特性讲清楚——以及它对日常 Python 开发、性能优化、类型系统的实际影响。

一、性能:JIT 编译器终于不再是”实验”了

Python 3.15 的 JIT 编译器(CPython 3.11 引入的 experimental JIT)这次有重大升级:

  • 升级到 LLVM 21 后端
  • 新的 tracing frontend + 基础寄存器分配
  • 更激进的优化 + GDB/GNU backtrace 调试支持
  • 更好的机器码生成

Phoronix 测的实测性能数据:

  • Linux x86-64:JIT 比标准解释器 7-8% 更快(几何平均)
  • Apple Silicon macOS AArch64:11-12% 更快

听起来不多?想想 Python 之前每次版本升级都只快 1-2%,7-12% 是巨大的进步。但要注意:JIT 仍标为 “experimental”,生产环境先在小流量灰度。Python 团队也明说 JIT 还需要达到”性能提升可证明”才转正。

二、启动加速:PEP 810 lazy imports

Python 3.15 引入了显式 lazy imports——你可以在 import 语句前加 lazy 关键字,让导入延后到实际使用该模块时才执行:

# 常规导入:立即执行
import pandas

# Lazy 导入:等到第一次用 pandas.xxx 才执行
lazy import pandas

这解决了 Python 长期以来的痛点——大库的 import 时间(pandas 1-2 秒、torch 5-10 秒、Django 1-3 秒)。对于 CLI 工具、Lambda 函数、短脚本意义巨大。ArjanCodes 测的案例:用 lazy imports 后,他的项目启动时间从 3.2 秒降到 0.8 秒。

三、类型系统升级

Python 3.15 一次给了 3 个类型系统更新:

1. PEP 814 frozendict 内建类型——不可变的 dict,可以当 dict key,可以放进 set。ArjanCodes 评价:”我以前为了这个功能手撸过无数次,现在终于有了。”

# 以前:手撸
from types import MappingProxyType
frozen = MappingProxyType({"a": 1, "b": 2})

# 现在:
frozen = frozendict({"a": 1, "b": 2})

2. PEP 661 sentinel 内建类型——表示”没有值”的标准方式,比 None 和 ... 都更明确:

def find(items, default=sentinel):
    for item in items:
        if item.matches():
            return item
    return default
# 调用方可以区分"没找到"和"找到了默认值 None"

3. PEP 798 unpacking in comprehensions——推导式里可以解包了:

# 以前
result = []
for a, b in pairs:
    result.append(a + b)

# 现在
result = [a + b for a, b in pairs]

外加 TypeForm 和 closed TypedDict,让 Python 的类型系统越来越接近 TypeScript 那种”严谨但好用”的水平。

Tachyon 采样 profiler logo

四、新 Tachyon 采样 profiler

Python 3.15 引入了Tachyon 采样 profiler(一个全新的 profiling 包),它通过周期性采样找到代码里的”热路径”,比 cProfile 这种”插桩” profiler 开销低 10-50 倍。对长跑的服务特别有用:

from profiling import sampling

with sampling.profiler():
    run_my_long_task()
# 输出按函数耗时排序的 top 20 热点

五、其他值得知道的更新

  • PEP 686 UTF-8 默认编码——告别 # -*- coding: utf-8 -*- 头文件声明,跨平台编码坑少一半
  • PEP 829 包启动配置文件——pyproject.toml 里可以声明包启动时的预处理逻辑
  • 更精准的错误消息——跨语言常见错误(Java/JS/Python 混写时)现在有针对性的提示
  • frame pointers 默认开启——profiling 和 debugging 工具的栈追踪更准

代码编辑器特写

六、性能优化实操建议

如果你正在考虑升级到 Python 3.15:

  1. JIT 暂时观望——标 experimental,先在测试环境跑,benchmark 你的实际工作负载
  2. lazy imports 立刻上——对启动时间敏感的脚本(CLI、Lambda、short-lived 进程)收益立竿见影
  3. frozendict / sentinel 用起来——这两个是 drop-in 替换,可以渐进式迁移
  4. Tachyon profiler 替代 cProfile——生产环境 profiling 不再是奢侈品
  5. UTF-8 默认别关——除非你维护古老的 Windows 专用代码

七、小夏点评

Python 3.15 让我最感慨的是“慢语言”也能享受 JIT 红利这件事。JavaScript 早就靠 V8 跑得飞快,Java 有 HotSpot,Rust 编译期优化——Python 一直因为 GIL 和解释器执行被吐槽”慢”。这次 7-12% 的提升虽然不爆炸,但证明了 CPython 团队在 JIT 这条路上走对了方向。

另一个观察:Python 的演化哲学越来越像”实用主义渐进”——不搞大跃进(不引入全新范式),而是把开发者的真实痛点一个个解掉(lazy imports、frozendict、sentinel、UTF-8 默认、Tachyon)。这种”小步快跑”的策略让 Python 30 多年后依然是数据科学、Web、AI 的首选语言。

对刚哥这种自己写工具的朋友,3.15 最值得升级的理由是 lazy imports——之前每次启动 Django 服务要 2-3 秒,现在 0.8 秒就绪,体感差别巨大。JIT 等 3.16 转正再用也不迟。

八、给读者的实操建议

  1. 个人项目:直接升 3.15,pip install 之后立即享受 lazy imports 和更好的错误消息
  2. 团队项目:先在 CI 跑全套测试,JIT 暂时关掉,3-6 个月后 3.16 再评估
  3. 数据科学:lazy imports 收益最大(pandas/numpy import 加速明显),Tachyon profiler 找热点很爽
  4. Web 后端:lazy imports + UTF-8 默认 + frozendict 都很香,Django/Flask 升级路径平滑
  5. 库作者:尽快支持 3.15,把 frozendict / sentinel 用上,给用户更好的 API

Python 3.15 不是”革命性版本”,但它是“让你写代码更舒服”的版本——这种持续的小改进累积起来,就是 Python 生态 30 年不衰的根本原因。

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注