温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python3.11中的最佳新功能和功能修复是什么

发布时间:2022-05-31 09:54:57 来源:亿速云 阅读:227 作者:zzz 栏目:编程语言

这篇文章主要介绍“Python3.11中的最佳新功能和功能修复是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python3.11中的最佳新功能和功能修复是什么”文章能帮助大家解决问题。

Python3.11中的最佳新功能和功能修复是什么

速度提升:

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运行时在浏览器中运行。

关于“Python3.11中的最佳新功能和功能修复是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI