Python 3.11正式版来了,比3.10快10-60%,官方:这或许是最好的版本

想要体验新功能的小伙伴赶紧去试试新版本吧!

图片

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 TracebacksPython 这门编程语言对初学者非常友好,它具有易于理解的语法和强大的数据结构。但对于刚刚接触 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/

原创文章,作者:机器之心,如若转载,请注明出处:https://www.iaiol.com/news/python311-zheng-shi-ban-lai-le-bi-310-kuai-1060-guan-fang/

(0)
上一篇 2022年 10月 25日 上午10:51
下一篇 2022年 10月 26日 下午4:53

相关推荐

  • 为什么我不再推荐你用Julia?

    从诞生之日起,Julia 已经走过了十多个年头。

    2022年 5月 17日
  • 博弈论让 AI 更加精确、高效,LLM 与自己竞争

    编辑 | 绿罗想象一下,你有一位朋友对同一课题给出了分歧的谜底,具体取决于你提问的方式。「秘鲁的首都是哪里?」会获得一个谜底;「利马是秘鲁的首都吗?」 会获得另一个。你能够会有点担心你朋友的智力,而且你几乎很难相信他们给出的任何谜底。这正是许多大型谈话模型 (LLM) 正在发生的事,这些超强大的机器学习工具为 ChatGPT 和其他人工智能奇迹提供了动力。开放式的生成性课题会产生一个谜底,而涉及必须在选项之间进行采用的判断性课题,通常会产生分歧的谜底。麻省理工学院的博士生 Athul Paul Jacob 表示:「

    AI 2024年 5月 13日
  • 姚班、智班之后,清华创造量子信息班,网友:简称「期(QI)班」?

    在姚班、智班之后,清华大学又创造了「量子信息班」。

    2021年 5月 25日
  • 澜舟科技推出「熊猫小说家」小程序,用 AI 书写你的小说

    普罗佩提乌斯说过:“我之所以写作并不是由于天才的冲动,而是为了舒缓爱情的烦恼和哀诉人生难以消除的痛苦。”每当被优秀小说中那些天马行空的想象、感人至深的对白、百转千回的情节所触动时,你是否有想过如果可以将自己的生活写成小说,那会是一部怎样的作品?如果把我的日常生活用玄幻世界的语言来描述,小说中会有什么好玩的事情发生?如果我和朋侪们一起进入了仙侠世界,我们会经历什么样的剧情?你的这些脑洞在澜舟科技全新推出的小程序—「熊猫小说家」中都可以找到答案!熊猫小说家是什么熊猫小说家是澜舟科技首

    2022年 10月 28日
  • 39亿参数模型公开可用,采样速度7倍提升,残差量化天生图片入选CVPR’22

    基于残差量化的自回归图象天生,官方已将代码公开。

    2022年 3月 27日
  • 迷信机械进修的竞争和共识:博弈论方法如何导致更智能的人工智能

    编译/凯霞得益于空军迷信研究办公室的195 万美元赠款,马萨诸塞大学阿默斯特分校数学和统计系教授 Markos Katsoulakis 和 Luc Rey-Bellet,以及布朗大学的 Paul Dupuis 将在接下来的四年开发一种新的机械进修方法,超越对大数据的传统依赖。Markos KatsoulakisLuc Rey-Bellet传统的机械进修依赖于庞大的数据缓存,算法可以筛选这些数据以「训练」自己完成任务,从而产生基于数据的数学模型。但是,如果数据很少,或者生成足够多的数据成本太高,该怎么办呢?一种可能的

    2021年 10月 31日
  • 是时候进修机械进修零碎安排了!斯坦福CS 329S开课,课件、笔记同步更新

    这是一门新的课程——在进修了算法、框架等内容后,是时候深入了解一下「机械进修零碎安排」了!

    2021年 1月 26日
  • 言语模型参数越多越好?DeepMind用700亿打败自家2800亿,训练优化出「小」模型

    给定固定的 FLOPs 估算,该当如何权衡模型巨细和训练 token 的数目?DeepMind 得出了与先前不同的结论。

    2022年 4月 3日
  • 提升编码水平,这本Python软件工程开源册本为研讨职员量身打造

    在科研领域,计算机软件的应用无处不在。但是,一些研讨者因为自身并非毕业于计算机相关学科,所以有时不得不将大量的时间花费在自学软件工程上。对于有些想要提升自身编码与软件开发水平的研讨者来说,合适的学习资料至关重要。本文介绍的这本开源册本就是为这类研讨者「量身打造」的。

    2021年 2月 5日
  • 特斯拉被判向挪威车主支付巨额罚金,或在多地产生连锁效应

    在挪威的一家法庭上,特斯拉由于通过软件进级限制充电速度、并降低电池容量而被判有罪。除非特斯拉上诉,否则该品牌将会向挪威遭到作用的车主每人赔付16000美元。据了解,挪威是特斯拉人均保有量最多的国度,而遭到相关问题作用的用户,可能会达到一万名。现如今其他国度也正在调查类似案件,所以这一惩罚可能会对特斯拉起到连环负面效应。早在2019年,外媒就曾报导过数起特斯拉车主在进级软件后,车辆续航上升12-30英里的事件。在那时,只有选装了85kWh电池包的Model S和Model X遭到了作用,而上述两款车型早在2016年就

    2021年 5月 26日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注