软件风向标

新闻

栏目

小时代11.3攻略 12小时游戏攻略

2023-05-31 04:49:36

报道机器之心

编辑:陈萍、杜伟

想体验新功能的朋友赶紧试试新版本!

终于,Python 3.11 正式版发布!

2020 年 1 月 1 日,Python 正式结束了对 Python 2 维护,这意味着 Python 2 已完全退休,进入 Python 3 时代。打从进入 3 版本以来,Python 官方发布了许多修改分支,现在是最新版本 Python 3.11。

事实上,研究界有一个不公开的秘密,那就是 Python 操作速度不快但容易上手,所以用户数量超多,在众多最受欢迎的语言列表中 Python 多次排名第一。许多开发者期待着这种语言的性能,其他人想象 Python 4 会不会在不经意间到来,有这种想法的人可以放一放,Python 之父 Van Rossum 都说了,Python 4.0 也许不会来了。

Van Rossum 曾表示:「我和 Python 核心开发团队成员 Python 4.0 没有想法,不感兴趣,估计至少会一直编号到 3.33。Python 加速是渐进的,3.11 版本将以新的速度提升,预计会比 3.10 快得多。」

正如 Van Rossum 根据官方信息,最新发布的信息显示 Python 3.11 比 Python 3.10 快 10-60%对用户更友好。这个版本经历过。 17 现在公开可用的月度开发。

Python 3.11 具体改进主要体现在:更详细 Error Tracebacks、更快的代码执行,更好的异步任务语法,改进类型变量,支持 TOML 配置分析等很酷的功能(包括快速启动,Zero-Cost 异常处理、异常组等)。

Python 指导委员会成员和核心开发者Python3.10/3.11 发布管理者 Pablo Galindo Salgado 表示,为使 3.11 成为最好的 Python 版本,我们付出了很多努力。

Python 3.11 新特性

Error Tracebacks

Python 这种编程语言对初学者非常友好。它具有易于理解的语法和强大的数据结构。但对于刚接触的人来说 Python 对于人来说,有一个难题,那就是如何解释 Python 错误时显示 traceback。

Python 3.11 将 Decorative annotation 添加到 tracebacks 为了帮助用户更快地解释错误的信息。要获得此功能,请添加以下代码 inverse.py 文件中。

例如,你可以使用它 inverse() 计算一个数的倒数。 0 没有倒数,所以在操作下列代码时会出错。

注意嵌入在 traceback 中的 ^ 和~ 符号,它们指向导致错误的代码。和以前一样 tracebacks 同样,你应该从底层开始,然后逐渐上升。这种操作对发现错误非常有用,但如果代码太复杂,带有注释 tracebacks 会更好。

执行代码更快

Python 以慢速称,例如 Python 中、常规循环比 C 几个数量级的类似循环较慢。

Python 官员们正在努力改善这一缺陷。2020 年秋,Mark Shannon 提出了关于 Python 几个性能改进。这个提议被称为香农计划 (Shannon Plan),他们希望通过几个版本 Python 的速度提高 5 倍。不久之后,微软正式加入该计划,该公司支持包括 Mark Shannon、Guido van Rossum 包括开发人员在内的开发人员致力于「Faster CPython」项目研究。

「Faster CPython」项目中的一个重要提案是 PEP 在此基础上,659,Python 3.11 许多改进。

PEP 659 描述了一种「specializing adaptive interpreter」。主要思想是通过优化常规操作来加快代码运行速度, 这类似于 JIT(just-in-time)相反,它不影响编译,Python 动态调整或可更改的字节码。

研究人员在字节码生成中添加了一个名字「quickening」在运行过程中优化指令并替换新步骤 adaptive 指令。

一旦函数被调用一定次数,quickening 指令将开始 CPython 3.11 中次调用后启动 quickening。可以调用 dis() 并设置 adaptive 参数观察解释器如何适应字节码。

在基准测试中,CPython 3.11 比 CPython 3.10 平均快 25%。Faster CPython 项目是一个正在进行的项目,有几个优化计划 2023 年 10 月与 Python 3.12 一起发布。你可以在那里 GitHub 关注这个项目。

项目地址:https://github.com/faster-cpython/ideas

异步任务语法更好

Python 对异步编程的支持已经发展了很长时间。Python 2 时代添加了生成器,asyncio 库最初是在 Python 3.4 中加,而 async 和 await 关键字是在 Python 3.5 中添加的。在 Python 3.11 您可以使用任务组(task groups),它为异步任务的操作和监控提供了更简单的语法。

类型变量的改进

Python 它是一种动态语言,但它通过可选类型提示支持静态类型。Python 静态类型系统的基础 2015 年的 PEP 484 中定义。自 Python 3.5 以来,每个 Python 版本介绍了几个与类型相关的新提案。

Python 3.11 发布了 5 与类型有关 PEP,创下新高:

PEP 646: 可变泛型PEP 655: 根据需要或可能丢失的情况,单个标记 TypedDict 项PEP 673: Self 类型PEP 675: 任意文字符串类型PEP 681: 数据类转换

支持 TOML 配置解析

TOML 是 Tom's Obvious Minimal Language 缩写。这是过去十年流行的配置文件格式。在为包和项目指定元数据时,Python 社区已将 TOML 作为首选格式。

虽然 TOML 但是 Python 没有内置 TOML 支持。当 tomllib 当添加到标准库时,Python 3.11 情况发生了变化。这个新模块是基于 toml 允许在第三方库上进行分析 TOML 文件。

以下是名为 units.toml 的 TOML 文件示例:

其他功能

除上述主要更新和改进外,Python 3.11 还有更多值得探索的功能,如程序启动速度更快、异常变化更大、字符串格式略有改进等。

程序启动速度更快

Faster CPython 项目的主要成果之一是实现更快的启动时间。当你运行时 Python 解释器的初始化需要一些操作,即使是最简单的程序也需要几毫秒。

在许多情况下,启动程序所需的时间可以忽略不计,而不是操作代码所需的时间。然而,在运行时间较短的脚本中,如典型的命令行应用程序,启动时间可能会显著影响程序的性能。例如,考虑到以下脚本,它是经典的 cowsay 启发程序。

在 snakesay.py 在中间,你从命令行读取一条信息,然后用一条可爱的蛇在对话气泡中打印它。你可以让蛇说任何话。这是命令行应用程序的基本例子。它运行得很快,但仍然需要几毫秒钟。大部分费用发生在 Python 导入模块时。

你可以使用 - X importtime 选项显示导入模块的时间。表中的数字为微秒,最后一列为模块名的格式。

示例分别运行 Python 3.11 和 3.10 结果如下图所示,Python 3.11 导入速度更快有助于 Python 更快地启动程序。

零成本异常

内部表示异常 Python 3.11 不同。异常对象较轻,异常处理发生变化。因此,只要不触发 except 字句,try … except 块里的开销越小。

所谓零成本异常受到影响 C 和 Java 等待其他语言的灵感。当您的源代码被编译成字节码时,编译器创建跳转表,以实现零成本异常。如果出现异常,请查询这些跳转表。如果没有异常, try 块中的代码在运行时没有开支。

异常组

在此之前,您了解了任务组及其如何同时处理多个错误。这一切都归功于一个被称为异常组的新功能。

我们可以这样考虑异常组,它们包装了其他几种常规异常。虽然异常组在许多方面表现为常规异常,但它们也支持特殊语法,帮助您有效地处理每个包装异常。如下所示,您可以通过描述和列出包装异常来创建异常组。

异常 Notes

常规异常任意添加 notes 扩展能力。. add_note() 添加任何异常 note,并通过检查.__notes__查看现有属性 notes。

负零格式化

用浮点数计算时,可能会遇到一个奇怪的概念——负零。你可以观察到负零和负零 regular zero 在 REPL 不同的呈现如下所示。

更多关于 Python 3.11 请参阅原文档更新细节。


原文链接:https://realpython.com/python311-new-features/

相关文章

图文推荐

猜你喜欢

  • 游戏攻略

  • 小时

  • 攻略

  • 时代

小时[共271款]更多>>

攻略[共124553款]更多>>

时代[共1286款]更多>>