Python 3.11目前处于功能完整的 预发布阶段 ,供冒险者测试,但它已经承诺对一些长期存在的Python限制进行 "翻盘"。这是自2021年10月的3.10版本以来的第一个小版本。如果python.org坚持他们自Python 3.8发布以来采用的时间表,我们也可以期待今年10月的某个时候发布Python 3.11。
Python 3.11 引入的最令人激动的变化是解释器处理一般字节码的方式的改变。与Java的起步阶段一样,Python也被称为 "慢"。但是就像之前的Java虚拟机(JVM)一样,Python解释器是一个即时编译器(JIT),需要进行优化,以保证性能。迄今为止,速度从来都不是优先考虑的问题,但是微软一直在帮助资助Python软件基金会(PSF),其明确的目标就是要加快速度。因此,Python 3.11 将在解释器中引入一项优化,"预测 "它目前正在操作的类型和数值,以便更快处理它们。
换句话说,当解释器遇到一般的二进制操作(乘法、加法、除法等)时,它可以用针对整数、浮点数、字符串等的特定操作来代替它,大大加快了处理速度。还有一些其他的调整,也会使事情变得更快,包括:
- 改进了小于一个机器字的整数的性能
- 通过更好地处理框架来加快调用和返回的速度
- 更好的对象内存布局,并减少内存管理的开销
- 零开销的异常处理
结合对核心模块加载方式的优化,现在的函数调用工作,以及解释器本身的启动,你会看到处理速度增加10-60%,这取决于你的代码要做什么。不过,平均来说,你会从25%的速度提升中受益,而不需要对你的代码做任何改动。
对于长期忍受Python的人来说,他们不得不用Python的缓慢性来换取它的易用性,性能的大幅提高是一个受欢迎的补充。但这并不是 Python 3.11 中引入的唯一特性。
Python 3.11 中的新特性和功能
在Python 3.11中引入的全部改进清单包括。
一般性变化
- 使用跟踪中的细粒度错误位置,更容易进行调试
- 以前,错误会被按行识别。现在,该行的具体错误将被突出显示,消除了歧义,加快了调试的速度。
- 利用异常组和例外*更简单的错误处理
- 以前,如果某些任务抛出了多个错误,你必须一个一个地处理它们。在3.11版本中,你现在可以同时处理所有这些错误,简化了异常处理。
- 在 标准库中支持解析TOML,从而实现更好的打包。
- TOML,即Tom's Obvious Minimal Language,是一种类似YAML的配置文件格式。它包含关于你的项目的一致和可预测的构建信息。随着3.11将tomllib添加到标准库,不再有任何借口使用setup.py来打包你的项目。 了解如何将你的项目从setup.py迁移到pyproject.toml。
- 数据类转换
- Python 没有为具有类似数据类语义的库提供向类型检查器声明其行为的方法。在 3.11 中, 你现在可以添加 "typing.dataclass_transform" 装饰器来表示一个给定的函数、类或元类是如何像数据类一样行为的。
- Asyncio支持任务组
- 与Async在JavaScript中的工作原理一样,任务组让用户运行嵌套的任务,即使其中一个任务失败,也能继续运行。使用上面描述的异常组,在处理完成后仍然可以提出错误。
- 支持原子分组((?>...))和占有式量词(*+, ++, ?+, {m,n}+)的Regex增强。
- re(regex)模块得到了一些整改,这不仅使它更快,而且意味着你终于可以利用大多数其他语言的正则表达式实现中的常见regex语法。
类型和语言的变化
- 自我类型
- 如果你曾经使用过一个返回self的类方法,你可能会发现它的注释很尴尬,因此,你会从分析工具中得到一些奇怪的结果。现在,"typing.Self "允许你将类方法的返回值注释为 "Self"。
- 变体泛型
- Python 提供了对类型提示的支持,现在包括 TypeVarTuple。这允许你为图元指定一个占位符,当你期待一个特定的数组结构时,这很有帮助。
- 任意的字面字符串类型
- 以前,类型注释没有办法表明一个给定的变量需要在源代码中定义一个字符串。新的typing.LiteralString注解让linters可以测试一个变量是源码中定义的字符串还是只由源码定义的字符串组成的新字符串。
- TypedDict必填项与缺失项
- TypedDict 目前不支持将某些键声明为必需的,而将其他键声明为可能缺失的。3.11引入了Required()和NotRequired(),为你提供一种方法来说明这些问题。
接下来的步骤
像往常一样,ActiveState平台将在发布后的几天内提供Python 3.11,因此你可以升级你的Python环境,以利用速度的提升。为了做好准备,你 现在就 可以 注册一个免费账户 ,用最新版本 的Python 3.10 (目前是3.10.5) 创建你自己的环境 。