站长家园(原代码之家)(www.adminjie.com)网站源码,微信源码,游戏源码,商业源码分享平台。
当前位置:网站首页 技术文章 网络编程 正文

Python 3.11中的最佳新功能和功能修复

时间:2022-05-31 [网络编程]作者:fabuyuan 浏览:6 次

本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于3.11版本中的最佳新功能和功能修复,下面是Python 3.11中最重要的新特性的概述,以及它们对Python开发人员的意义,下面一起来看一下,希望对大家有帮助。

推荐学习:python视频教程

Python编程语言每年都会发布新版本,上半年发布了一个功能锁定的beta版本,年底将发布最终版本。Python 3.11的功能集刚刚定稿,有一个测试版可供测试。开发人员被鼓励在非生产代码上试用此最新版本,以验证它是否与您的程序不相冲突,并了解您的代码是否会从其性能增强中受益。

下面是Python 3.11中最重要的新特性的概述,以及它们对Python开发人员的意义。

速度提升:

Python 3.11中有许多单独的性能改进,但最大的一个增加是专门的自适应解释器。由于对象的类型很少更改,解释器现在尝试分析运行的代码,并用特定类型的字节码替换常规字节码。例如,二进制操作(加法、减法等)可以替换为整数、浮点和字符串的专用版本。

在Python 3.11中,Python函数调用也需要较少的开销。函数调用的堆栈帧现在使用的内存更少,设计效率更高。此外,虽然递归调用没有进行尾部优化(无论如何,这在Python中可能是不可能的),但它们比以前的版本更高效。Python解释器本身的启动速度也更快,Python运行时所需的核心模块的存储和加载效率也更高。

根据网的Python基准测试套件,Python 3.11的运行速度大约是3.10版的1.25倍。请注意,这个加速是一个总体衡量标准:有些东西要快得多,但其他许多东西只是略快或大致相同。尽管如此,这些改进最好的部分是免费的。您无需对Python程序进行任何代码更改即可利用3.11的加速。

增强的错误信息提示:

3.11中另一个非常有用的特性是更详细的错误消息。由于解释器中使用了新的解析器,Python 3.10已经有了更好的错误报告。现在,Python 3.11对此进行了扩展,提供了关于给定表达式的哪个特定部分导致错误的详细反馈。

思考以下引发错误的代码:

x = [1,2,3]
z = x[1][0]

在Python 3.10中,我们会收到以下错误消息,这不是很有帮助:

  File "C:\Python311\code.py", line 2, in <module>
    z = x[1][0]
TypeError: 'int' object is not subscriptable

与其让我们弄清楚哪个int是不可编译的代码,Python 3.11中的错误跟踪指向生成错误的行的确切部分:

  File "C:\Python311\code.py", line 2, in <module>
    z = x[1][0]
        ~~~~^^^
TypeError: 'int' object is not subscriptable

现在,问题的出处就十分明确了。

异常改进:

Python的错误处理机制在Python 3.11中获得了许多新特性:

1、使用新的except*语法和新的ExceptionGroup异常类型可以处理多异常问题。这允许优雅地处理可能同时引发多个错误的问题,例如在处理异步或并发方法时,或者在重试操作时处理多个故障时。

2、“零成本”异常:除非实际抛出异常,否则现在对程序没有内存消耗。这意味着try/except块的默认路径更快,并且使用更少的内存。

3、捕获异常所需的时间减少了约10%。

4、异常可以通过上下文注释来完善,使得异常与代码块分离。

类型提升:

Python的类型提示特性使更大的代码库更易于管理和分析,并且自Python 3.5以来,随着每次修订类型提示的性能都有显著增加。Python 3.11引入了几个新的类型提示。

自身类型:

类方法返回自身类型之前需要迟钝且详细的声明才会生效。类型.Self的模式让你声明类方法的返回值更为简便。您可以从这些方法的分析工具中获得有用且可预测的结果。

任意字符串文字类型:

以前,类型注释无法定义给定变量必须是字符串文字,即源代码中定义的字符串。新类型。LiteralString注释修复了这一问题。使用新注释,linters可以测试变量是源中定义的字符串还是仅由源定义的字符串组成的新字符串。

数据类转换:

自Python 3.7以来,数据类使得定义类变得更加容易,这些类遵循基于初始化参数创建属性的常见模式。但没有标准机制允许行为类似于数据类(但不是数据类本身)的东西使用类型注释来声明其行为。数据类转换添加了 类型.dataclass_transform修饰符去提示编译器一个给定的函数、类或元类的行为像一个数据类。

可变泛型:

最初的泛型建议包括TypeVar,这是一种使用单个参数化类型指定泛型函数的方法,例如,类型T可以是int或float。Python 3.11添加了TypeVarTuple,或“可变泛型”,您可以使用它来指定占位符,不仅仅是一种类型,而是一系列类型,表示为元组。这在像NumPy这样的库中尤其有用,在这些库中,您可以提前检查错误,例如提供的数组的形状是否正确。

stdlib中支持TOML只读:

Python使用TOML或Tom显式的简约语言作为配置格式(如pyproject.TOML),但没有将读取TOML格式文件的能力公开为标准库模块。Python 3.11添加了tomllib来解决这个问题。注意,tomllib不创建或写入TOML文件;为此,您需要像Tomli-W或TOML Kit这样的第三方模块。

正则表达式的原子分组和加速:

Python的re模块用于处理正则表达式,它缺少正则表达式的其他实现中的一些特性。一种是原子分组,在其他语言中得到广泛支持。Python 3.11现在使用原子分组的通用语法支持此模式(例如,(?>…)。

re模块的模式匹配引擎也被重写了一些,运行速度快了大约10%。

从标准库中删除“坏死的电池”:

PEP 594启动了一项从Python标准库中移除许多所谓的坏死的电池或过时或未维护的模块的工作。从Python 3.11开始,这些库被标记为已弃用,但尚未删除;它们将在Python 3.13中完全删除。

Python 3.11其它新增功能、修复和更改:

Python 3.11中还有许多更小的改进:

1、Python对象需要更少的内存,因为它们的名称空间现在是延迟创建的,它们的名称空间字典现在尽可能共享键。

2、所有键都是Unicode的字典不再需要存储哈希,因此减少了字典的大小并允许更高的缓存效率。

3、Python运行时使用的是Python的解释器,现在可以实验性地支持编译到WebAssembly。这可能有助于PyScript等项目的未来开发,PyScript允许WASM编译的Python运行时在浏览器中运行。

推荐学习:python视频教程

以上就是Python 3.11中的最佳新功能和功能修复的详细内容,更多请关注站长家园其它相关文章!

本文标签:  python

转载请注明来源:Python 3.11中的最佳新功能和功能修复

本文永久链接地址:https://www.adminjie.com/post/13004.html

免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。

  • 站长家园(原代码之家)会员升级
  • 最新文章
    • html5草案是哪一年发布的

      html5草案是哪一年发布的

      html5草案是在2008年发布的。HTML5草案的前身是“WebApplications1.0”,是在2004年被“WHATWG”提出,直到2008年1月...

    • Vue3和Vue2的差异是什么?全方位对比一下!

      Vue3和Vue2的差异是什么?全方位对比一下!

      Vue3和Vue2的差异是什么?下面本篇文章给大家全方位对比Vue3与Vue2,聊聊Vue3与Vue2的区别,希望对大家有所帮助!从Vue3发布以来,我就一直对...

    • 浮动是css3的新特性吗

      浮动是css3的新特性吗

      浮动不是css3的新特性。定义元素在哪个方向浮动的float属性在css1时就已经可以使用了,css的浮动会使元素向左或向右移动,其周围的元素也会重新排列,一个...

    • translate是css3属性吗

      translate是css3属性吗

      translate是css3的一个新的css属性;translate属性用于定义元素的2d平移转换,该属性常与transform属性配合使用,transform...

    • 浅析Angular中的独立组件,看看怎么使用

      浅析Angular中的独立组件,看看怎么使用

      本篇文章带大家了解一下Angular中的独立组件,看看怎么在Angular中创建一个独立组件,怎么在独立组件中导入已有的模块,希望对大家有所帮助!Angular...

    热门文章