Python 3.7 发布了,有什么新特性值得关注?


Python 3.7 发布了,有什么新特性值得关注?
1 回复

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 forasync with) 现在可以在异步生成器里使用 async forasync 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.OrderedDicttyping.Final 等,对类型提示的支持更完善。

总结建议 如果项目还没升级,可以先在开发环境试试 dataclassesbreakpoint(),这两个用起来最直接。

回到顶部