Python计划于2023年10月发布3.12版本。这个版本带来了一系列令人激动的功能和改进。它的目标是通过提供一个更高效、功能更强大的平台来改善你的编码体验,从而提升你的编程技能。
1、增强的错误信息
Python在最近的版本中不断改进其错误信息。3.11版本通过指示在行中的确切位置,提供了更准确的错误信息。
Python 3.12将这些增强功能提升到了一个新的水平,具体包括以下内容:
- 对于缺少模块的建议(”你是否忘记导入X?”),现在包括了来自标准库的模块。
- 对于与导入相关的常见语法错误,改进了错误建议。例如,如果你的代码中有import p from m,将会提示一个错误,询问是否打算写成from m import p。
- 对于给定模块的导入错误,现在还包括来自导入模块的命名空间的建议。
- NameError的建议现在在类实例中抛出时也会包含self。例如,如果名称speed未定义,错误消息将提出self.speed作为潜在的修正建议。这特别有用,因为在类实例中忽略self而导致实例变量错误是一个常见的错误源。
2、对Linux Perf Profiler的支持
广泛使用的Linux性能分析工具perf现在可以与Python 3.12程序一起使用。在过去,它只专注于跟踪Python运行时内的C级操作。
通过Python 3.12,你现在可以激活perf来收集有关Python程序的详细信息。你可以在环境级别或者在Python程序中使用sys.activate_stack_trampoline函数来激活它。
3、类型提示的改进
自从Python 3.5引入类型提示语法以来,Python的类型提示语法使得代码检查工具能够提前检测出各种错误。随着每个版本的发布,Python的类型系统不断发展,涵盖了更广泛的用例,并提供了增强的类型提示功能。
TypedDict Python 3.12引入了TypedDict作为函数关键字参数类型提示的来源。这利用了版本3.11引入的Unpack可变泛型。
下面是一个示例,演示了这个功能:
class Movie(TypedDict):
name: str
year: int
def foo(**kwargs: Unpack[Movie]) -> None: ...
在这种情况下,函数foo可以接收与Movie TypedDict的内容相符的名称和类型的关键字参数:类型为str的name和类型为int的year。
这个增强在为接受没有默认值的可选关键字参数的函数进行类型提示时非常有用。
类型参数语法 Python 3.12引入了一种更简洁的语法,用于指定泛型类、函数或类型别名中的类型。
考虑以下示例:
# 旧方法
from typing import TypeVar
_T = TypeVar("_T")
def func(a: _T, b: _T) -> _T:
...
# 新型参数法
def func[T](a: T, b: T) -> T:
...
使用新的语法,无需显式导入TypeVar。相反,您可以使用func[T]语法表示泛型类型引用。还可以定义类型的边界,例如指定类型必须是一组类型中的其中一个。但是,这些类型本身不能是泛型的。此语法的一个示例是func[T: (str, int)]。
4、垃圾回收
在Python 3.12中,垃圾回收(GC)机制发生了改变。以前,垃圾回收会在分配对象时运行。
然而,从Python 3.12开始,垃圾回收仅在Python字节码循环中的eval断点机制内运行。换句话说,它在执行一个字节码和下一个字节码之间运行。
此外,当CPython的信号处理程序检查机制被调用时,垃圾回收也会触发。这个调整使得在运行时外长时间运行的C扩展调用期间可以进行定期的垃圾回收。
揭开Python 3.12的面纱
Python 3.12引入了一系列令人激动的功能和改进,为您的编码体验带来革命性的变化。通过改进的错误信息、增强的类型能力、对Linux Perf Profiler的支持以及优化的垃圾回收,Python 3.12为您提供了编写高质量、高效的代码所需的工具。拥抱Python的力量,将您的编码技能提升到新的高度。