前言
Python 3.11 这版最直观的变化,还是快了。官方给出的区间是比 Python 3.10 快 10% 到 60%,实际感受会随代码类型波动,但'比上一版更顺手'基本是成立的。除了速度,3.11 还把错误信息、异步任务、类型系统和 TOML 解析都往前推了一步,算是一次面向日常开发体验的更新。
更清楚的 Traceback
以前 Python 报错时,traceback 往往能告诉你哪里炸了,但不一定足够直观。Python 3.11 把错误定位做得更细,输出里会加上更明确的指示符,直接指向出问题的表达式。对于刚接触 Python 的人,这比单纯看一长串栈回溯好用得多;对老手来说,复杂表达式里的定位也更省时间。
看这个例子:
def inverse(x):
return 1 / x
print(inverse(0))
在 3.11 里,traceback 会更清楚地标出真正出错的位置。它不只是告诉你'这一行有问题',而是尽量把问题缩到具体表达式上。排查简单错误时,这种改动很实用;代码一复杂,收益会更明显。
更快的执行速度
Python 慢这件事一直都在,但 3.11 这次确实有实质推进。背后的主要思路来自 PEP 659,也就是 specializing adaptive interpreter。简单说,解释器会观察热点路径,在运行时把常见操作替换成更适合当前上下文的指令。它不是 JIT,但思路有点像:先跑起来,再根据行为做局部优化。
这里面有个关键步骤叫 quickening。CPython 3.11 在函数调用到一定次数后,会开始把字节码'热起来',再逐步替换成 adaptive 指令。你可以用 dis() 看这个过程:
import dis
def test_func():
x = 1 + 2
for i in range(100):
x += i
return x
# 多次调用触发优化
test_func()
test_func()
test_func()
test_func()
test_func()
test_func()
test_func()
test_func()
dis.dis(test_func, adaptive=True)
官方基准里,CPython 3.11 平均比 3.10 快约 25%。这个数字不是所有场景都能直接复现,但方向很明确:解释器层面的优化开始真正见效了。Faster CPython 还在继续推进,3.11 只是中间一站,不是终点。
异步任务写法更顺
Python 的异步支持已经铺了很多年,从生成器到 asyncio,再到 async / await,这条线一直在补齐。3.11 新增的 TaskGroup 让并发任务的组织方式更干净,也更接近'这批任务是一组'的真实语义。
import asyncio
async def fetch_data(url):
asyncio.sleep()
():
asyncio.TaskGroup() tg:
tasks = [tg.create_task(fetch_data()) i ()]
task tasks:
(task.result())
asyncio.run(main())


