Python是一种动态语言,以其可读性、通用性和强大的社区而闻名。新版本3.12于10月2日发布。在全球贡献者的帮助下,Python再次迈出了巨大的一步。如果您对这种语言的最新改进感兴趣,那么这篇文章是为您准备的。
Python每年发布新版本,年初是功能锁定的测试版本,年底是正式发布的新版本。
我们不浪费时间,来看看这个版本的改进。
改进的错误消息
Python开始提供用户的拼写错误建议,这是这种语言的一项重要进展。此外,以下是一些新功能:
- 导入我们代码中忘记导入的模块在新版本中作为错误消息的一部分提供了建议。
- 在变量或函数名称拼写错误的情况下,NameError提供了建议。
- 导入失败
from <module> import <name>
语句引发的ImportError异常现在包含了基于<module>
中可能可用名称的<name>
的建议。
- 当用户输入
import x from y
而不是from x import y
时,语法错误消息有所改进。
NameError
的建议在类实例内部引发时也包括self.
前缀的名称(例如,name 'name' is not defined。Did you mean 'self.name'?
)。这是因为在类实例中省略self
,例如变量,在其中常常出现错误。
F-String改进
F-Strings(格式化字符串)是在Python 3.6中首次引入的。它们是Python方便的字符串格式化方式。在以前的版本中,它们在格式化上受到严格限制。但在3.12版本中,解除了部分限制。
- 现在我们可以在F-String内部使用字符串引号(”或’),而不受先前用法的限制。
- F-strings可以像其他括号或引号一样允许多行表达式(例如,使用括号使表达式跨越多行)。
- 目前为止,F-Strings中不允许反斜杠(\)或Unicode字符,但此限制已被解除。
- 现在,f-string表达式中的错误会给出错误在封闭语句内的确切位置,而不仅仅是在表达式本身内部。这使得f-string的错误更容易追踪和解决。
类型提示的改进
Python3.5引入了Python类型提示语法,允许在编码之前使用linting工具捕捉错误,TypeDict是新的添加内容。
from Typing import TypedDict, Unpackclass Employee(TypedDict): name: str id: intdef retrieve(**kwargs: Unpack[Employee]) -> None: ...
TypeDict用于提示关键字参数。然后使用3.11中添加的Unpack来解析TypeDict。
对于可以返回不同数据类型作为输出的泛型函数,引入了Type变量进行类型提示。
def first[T](elements: list[T]) -> T: return elements[0]
在上面的函数中,如果传入整数列表,则输出将是一个整数。如果传入字符串列表,则输出将是一个字符串。此外,请注意上面的示例中不需要声明Typing。
最近版本中还增强了静态类型检查。对于在子类中覆盖父类方法的方法,可以使用@override来让类型检查器检测错误。
from typing import overrideclass Base: def get_color(self) -> str: return "blue"class GoodChild(Base): @override # Okay: overrides Base.get_color def get_color(self) -> str: return "yellow"
内联解析
解析是一种语法,允许您快速构造列表、字典和集合,现在不再创建一次性函数对象;它们现在是“内联”构建的。结果速度现在为真实案例约为11%,在微基准测试中最多提速两倍。
加速现在比3.11更快。加速是指注意到某个特定字节码被执行了多次,使其成为专门化的候选,而专门化意味着解释器用专门的字节码替换通用字节码。
子解释器
它们提供了多个解释器实例的能力,每个实例都有自己的GIL,在单个Python进程中并行运行。这将是Python更好并行性的一个重要进展。然而,版本3.12中只包括了CPython内部使其成为可能的部分。目前还没有面向最终用户的子解释器界面。
对Linux perf分析器的支持
广泛使用的Linux分析器工具perf
可与Python一起使用,但只返回有关Python运行时的C级别上发生的情况的信息,不显示有关实际Python程序函数的信息。
Python 3.12启用了一个选择模式,允许perf
收集有关Python程序的详细信息,而不仅仅是运行时信息。可以在环境级别或Python程序中使用sys.activate_stack_trampoline
函数进行选择。
其他值得注意的特性
- 引入了不可变对象-它们的引用计数不会改变。
- 更小的对象大小-对象的大小减小到96字节。
- 日历常量用于表示天和月份。
- 几个标准库的弃用和删除,例如最近版本中删除了distutils。
- 最近版本中对异步功能进行了一系列的改进。
附上作为参考的发布文档 — https://www.python.org/downloads/release/python-3120/
所以升级到 3.12 值得吗?
愉快学习…