当前位置: 首页 > 科技观察

Python3.11中最好的新特性和修复_0

时间:2023-03-11 21:28:58 科技观察

Python每年都会发布一个新版本,上半年是功能锁定测试版,年底是最终版本。Python3.11的功能集刚刚完成,并且已经发布了测试版。开发人员可以在非生产代码上试用这个最新版本,验证它是否可以在您的程序中运行,并了解您的程序是否可以从这种性能提升中获益。从。。得到好处。下面概述了Python3.11中最重要的新功能,以及它们对Python开发人员的意义。Speedup在Python3.11中,有许多单独的性能改进,最大的一个是自适应解释器,由于对象的类型很少改变,解释器现在尝试分析运行代码并将其替换为特定类型的字节码常规字节码。例如,二进制运算(加法、减法等)可以替换为整数、浮点数和字符串的特殊版本。Python函数调用在Python3.11中也需要更少的开销,用于函数调用的堆栈使用更少的内存并且设计得更高效。此外,虽然递归调用没有尾部优化(这在Python中是不可能的),但它们比以前的版本更高效,Python解释器本身启动速度更快,存储和加载运行时所需的核心模块也更高效.根据官方Python基准套件,Python3.11的运行速度比3.10快1.25倍。请注意,这种速度提升是一种综合衡量标准,有些东西要快得多,但许多其他东西只是稍微快一点或差不多。这些改进是无限制的,您无需对原始Python程序进行任何更改即可享受3.11的速度改进。增强的错误消息Python3.11的另一个有用特性是更详细的错误消息,Python3.10已经有了更好的错误报告,这要归功于在解释器中使用了新的分析器。现在,Python3.11通过提供关于给定表达式的哪个特定部分导致错误的详细反馈来扩展这一点。3.11中另一个非常有用的特性是更详细的错误消息,Python3.10已经有了更好的错误报告,这要归功于解释器中使用的新解析器。现在,Python3.11对此进行了扩展,以提供有关给定表达式的哪个特定部分导致错误的详细反馈。考虑下面的代码,它会抛出错误:1.x=[1,2,3]2.z=x[1][0]在Python3.10中,我们得到以下错误消息,这不是很有帮助:1.File"C:\Python311\code.py",line2,in2.z=x[1][0]TypeError:'int'objectisnotsubscriptableBugtraceinPython3.11直接指向确切产生错误的部分,而不是让我们猜测哪个int是不可编写脚本的。1.File"C:\Python311\code.py",line2,in2.z=x[1][0]3.~~~~^^^4.ypeError:'int'objectisnotsubscriptable现在问题出在哪里已经没有歧义了。改进的异常在Python3.11中,Python的错误处理机制Exceptions获得了许多新特性:通过新的except*语法和新的ExceptionGroup异常类型,可以同时引发和处理多个异常,例如在处理异步或并发方法时。或者它可以在重试操作时更优雅地处理多个失败。零成本异常:异常现在对程序没有成本,除非它们实际被引发,这意味着try/except代码块更快并且使用更少的内存。捕获异常所需的时间减少了大约10%。异常可以从它们自己的文本中分离出来,并通过上下文注释进行丰富。改进的类型Python的类型提示功能使更大的代码库更易于管理和分析,自Python3.5以来的每次修订,Python3.11都带来了几种新的类型提示功能。SelfType以前,类方法returnself需要复杂而冗长的注释才能起作用。typing.Self可以简单地将类方法的返回值注解为Self,你可以从分析工具中得到有用的和可预测的结果。任意字符串文字类型以前,类型注释无法指示给定变量必须是字符串文字(即源代码中定义的字符串)。新的typing.LiteralString注释解决了这个问题。有了新的注解,字面量就可以测试变量是源代码中定义的字符串,还是由源代码中定义的字符串组成的新字符串。数据类转换从Python3.7开始,数据类可以更轻松地定义遵循基于初始化参数创建属性的通用模式的类。但是没有标准的机制允许行为像(但不是)数据类的东西,使用类型注释来声明它们的行为,数据类转换添加装饰器typing.Dataclass_transform来指示给定的函数、类或元类工作像数据类。可变泛型类型提示的初始提议包括TypeVar,一种使用单个参数类型指定泛型函数的方法,例如,类型T可以是int或float,Python3.11添加了TypeVarTuple,或“可变泛型”,您可以使用它来指定占位符,不仅仅是一种类型,而是一系列类型,表示为元组,这在像NumPy这样的库中特别有用,您可以在其中提前执行错误检查,例如,确定输入数组是否正确。标准库中的TOMLread-only支持Python使用TOML(即Tom'sObviousMinimalLanguage)作为配置格式(例如pyproject.toml),但不公开读取TOML格式文件作为标准库模块的能力。Python3.11增加了tomllib来解决这个问题,注意tomllib不能创建或写入TOML文件,所以需要第三方模块如Tomli-W或TOMLKit。正则表达式的原子组和加速处理正则表达式的re模块缺少其他正则表达式实现中的一些功能。一种是原子组,它在其他语言中得到广泛支持,Python3.11现在使用通用的原子分组语法(例如(?>...))。re模块的模式匹配引擎也进行了一些重写,运行速度提高了10%。从标准库中删除“死电池”PEP594开始努力从Python标准库中删除许多所谓的“死电池”,即过时或未维护的模块,这些模块在Python3.11中被标记为已弃用但尚未删除;它们将在Python3.13中完全删除。Python3.11中的其他新添加、修复和更改Python3.11中还有更多小改进:Python对象需要更少的内存,因为它们的命名空间现在是延迟创建的,并且它们的命名空间字典是可能的共享键。一个字典,其中所有键都是Unicode,不需要存储哈希,减少字典大小并提高缓存效率。CPython运行时(Python解释器)现在具有对编译为WebAssembly的实验性支持,这可能有助于未来开发像PyScript这样的项目,它允许WASM编译的Python运行时在浏览器中运行。译者介绍王德真,51CTO社区编辑,10年互联网产研经验,6年IT教育培训行业经验。前K12教育上市公司产品经理,技术博客专家,蓝桥签约作者,《滚雪球学Python》专栏作者,《爬虫100例》专栏特约作者,78技术人社区发起人。原标题:Python3.11中最好的新特性和修复,作者:SerdarYegulalp链接:https://img.ydisp.cn/news/20220702/oi2tg2tvoag