Python 3.7 确实带来了一些很实用的新特性。我个人觉得最值得关注的有这几个:
1. dataclasses 模块
这个绝对是生产力工具。以前写一个主要用来存数据的类,得写一堆 __init__、__repr__、__eq__ 方法,现在用 @dataclass 装饰器几行搞定:
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
z: float = 0.0 # 可以设置默认值
p = Point(1.5, 2.5)
print(p) # 自动生成 __repr__: Point(x=1.5, y=2.5, z=0.0)
自动实现了 __init__、__repr__ 和 __eq__,省了不少样板代码。
2. 内置的 breakpoint()
调试更方便了,直接在你的代码里放一个 breakpoint(),运行到那里就会自动进入调试器(默认用 pdb)。比原来的 import pdb; pdb.set_trace() 简洁多了。
3. 异步生成器支持 (async for 和 async with)
现在可以在异步生成器里使用 async for 和 async with 了,让异步编程更自然。
4. 字典保持插入顺序成为语言规范 其实从 3.6 开始 CPython 的实现就已经保持顺序了,但 3.7 把它变成了语言规范,现在所有兼容的 Python 实现都必须保证这一点,写代码时更放心。
5. 类型注解的运行时支持 (from __future__ import annotations)
这个主要是为静态类型检查准备的,通过这个导入,类型注解在运行时会被当成字符串处理,可以避免一些前向引用的问题,对大型项目比较有用。
6. 上下文变量 (contextvars)
为异步任务提供了类似线程局部变量的机制,但适用于异步上下文,在处理像 web 请求这类需要传递上下文信息的异步场景时很有用。
7. 时间函数的纳秒级精度
time 模块里的一些函数(如 time.time()、time.perf_counter())现在能提供纳秒级的精度了,对需要高精度时间测量的场景有帮助。
8. -X importtime 启动选项
可以用来测量模块导入花费的时间,帮助优化启动速度。
9. functools.singledispatch 支持类型注解
现在可以用类型注解来定义单分派函数了,代码更清晰。
10. typing 模块的改进
比如 typing.OrderedDict、typing.Final 等,对类型提示的支持更完善。
总结建议
如果项目还没升级,可以先在开发环境试试 dataclasses 和 breakpoint(),这两个用起来最直接。

