来源:https://realpython.com/python311-new-features

推荐阅读:终于来了,【第三期】 彭涛Python 爬虫特训营!!

终于,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 上关注该项目。Python 3.12 目标:还可以更快!

项目地址: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 的更新细节请参阅原文档。

我们爬虫第三期来了,加入我们,学更实用,更值钱的 Python 技术!

从0到1系统掌握Python 技术(入门进阶)
2个企业实战项目,4大常用工具
掌握24种反爬策略手段,成为真正爬虫高手
能抓取市面上90%的网站
掌握主流爬虫技术,就业找工作 真正全方位帮助大家从0到1,从 Python 入门到进阶,转行找爬虫工作。

Python 3.11 终于发布了,性能大提升!相关推荐

  1. 华为回应与陈春花教授相关传言;iPhone14Pro系列将独占A16芯片;Bug太多,Python 3.11推迟发布|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. 华为回应与陈春花教授相关传言;iPhone14Pro系列将独占A16芯片;Bug太多,Python 3.11推迟发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  3. win10提升性能的服务器,Win10性能大提升,这些设置让你的电脑直接起飞

    原标题:Win10性能大提升,这些设置让你的电脑直接起飞 大家有没有发现电脑有时总会莫名的卡顿,而且明明也没有打开太多软件,可是运行还是很慢. 在不考虑更换硬件设备的前提下, Win10 一些软件和硬 ...

  4. 丑拒or真香?iPhone 11终于发布了!一文看懂苹果发布会

    出品 | 网易手机 2019年9月11日凌晨一点消息,苹果今年秋季iPhone新品发布会在苹果新总部Apple Park的乔布斯剧院举行,算上今年已经是苹果第三次在乔布斯剧院发布新iPhone,当然这 ...

  5. 高通5G开始挤牙膏?骁龙865+发布,性能小幅提升,一加听了要笑,魅族看了会流泪...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 高通号称的目前最强大的移动芯片,刚刚发布. 骁龙865 Plus.没错,骁龙865系列的"提升"版. 相较于骁龙865, ...

  6. iPhone 13 终于等到了!降价、新颜色、电池续航性能大提升

    整理 | 禾木木.苏宓 出品 | AI科技大本营(ID:rgznai100) 它来了,真的来了! 不知有多少朋友守在今日凌晨观看一年一度的科技春晚--苹果发布会! 还是那个熟悉的样子,从加利福尼亚的沙 ...

  7. chrome 历史版本_2020 年最后一次更新,Chrome 性能大提升的新版本来了

    11 月 18 日凌晨,Google 正式发布 Chrome 87,作为计划中 2020 最后的一次更新,Google 不仅在这个版本中为我们带来了一些实用的功能改进,此前一直在测试的性能提升和能耗优 ...

  8. Facebook性能大提升的秘密:HipHop

    facebook / hiphop-php https://github.com/facebook/hiphop-php Facebook神秘的PHP项目HipHop for PHP终于揭开面纱.这个 ...

  9. win10计算机性能选项在哪,Win10性能大提升,这些设置让你的电脑直接起飞

    大家有没有发现电脑有时总会莫名的卡顿,而且明明也没有打开太多软件,可是运行还是很慢. 在不考虑更换硬件设备的前提下, Win10 一些软件和硬件的简单调整,也可以使我们电脑性能提升,运行更快. 下面就 ...

最新文章

  1. 服务器端往手机端推送数据的问题(手机解决方案)
  2. H5新增的标签以及改良的标签
  3. linux下使用automake、autoconf生成configure文件
  4. 020_Transfer穿梭框
  5. 为什么在EOS上的DApp对开发人员来说不盈利?
  6. 【Pygame小游戏】别找了,休闲游戏专题来了丨泡泡龙小程序——休闲游戏研发推荐
  7. 1.1.3 计算机的分类与发展方向(电子计算机、计算机按指令和数据流分类、计算机发展趋势正向着“两级”分化)
  8. comsol稀物质传递_COMSOL电弧仿真
  9. VC编程-预编译头文件(precompiled header)
  10. 【Gym 102134-E】Kth subtree【权值树状数组、二分统计第k大+dfs离线操作】
  11. 微型计算机原理与接口技术知识点
  12. 游戏多开的原理与方法
  13. 怎样用Python自制好看的指数估值图
  14. 蒙特卡洛(Monte Carlo)
  15. 电脑取消撤销快捷键是什么_都知道“撤消”快捷键是Ctrl Z,那“反撤消”是什么呢?...
  16. 二等水准测量记录数据_二等水准测量记录计算示例.doc
  17. IDEA jjsp 404_IDEA 卡住buid(编译)不动的解决办法_java
  18. Rocket mq的一些介绍
  19. tomcat配置SSI
  20. 【产品分享】嘉为蓝鲸统一告警中心,系统可用的第一层保障!

热门文章

  1. 邓西百度知道刷赞工具
  2. 《Linux 黑客基础教程》翻译版发布
  3. mysql explain rows理解
  4. 微信支付宝换钱源码 可对接易支付
  5. poi生成的微软word打不开,但是wps可以打开,请大神帮忙解答下,灰常感谢
  6. 【EslaticSearch】ES 搜索引擎详解
  7. emoji 表情符号全集
  8. 程序员求职攻略(《程序员面试笔试宝典》)之面试心得交流?
  9. 用playbook安装Apache,修改端口,配置ServerName,修改主页,设置开机自启
  10. 2021高考3模合肥成绩查询,2021三模考试成绩