新Python 3.11:升级的最佳时间是什么?

N

Python的最新版本——Python 3.11——现已发布。但是开发者是否应该在游戏发布后立即进行升级?这篇文章将讨论最新Python版本的一些主要改进以及当前具有挑战性的领域,以帮助您在正确的时间切换到它。

Python的进化

大多数人对Python的遗产并不陌生。即使您不知道如何编码,您也可能已经听说过Python。一开始只是一个爱好项目,以一个英国喜剧团体的名字命名,很快就成为了世界著名的喜剧团体之一最受欢迎的编程语言在世界各地。

距离Python的第一个版本发布已经过去了30多年。它的高度抽象使其更适合于数据分析、AI和ML项目,而不是基于业务和营销的产品。欧宝注册官网因此,与其他解释性语言(如Java或PHP)相比,Python相对较慢。

Python的创建者Guido Van Rossum想要改变这一点。正如他在上一届Python语言峰会上所说的,他一直在计划将Python的速度提高4倍.这一愿景导致了该编程语言的最新版本于2022年10月24日推出。

介绍Python 3.11,它还带来了一些令人兴奋的功能改进,供开发人员和技术爱好者修补。但是您现在应该迁移到它吗?如果不合适,什么时候合适呢?

为了做出这个决定,并确定它是否像预期的那样好,我们必须深入研究Python新版本给世界带来的重大变化,以及一些新发现的问题。

Python 3.11的重大变化

快1.25倍

Python 3.11带来了一系列明显的性能改进,但专门的自适应解释器是迄今为止最重要的一个。由于对象的类型不经常改变,解释器现在可以通过检查运行的代码,将泛型字节码替换为特定于类型的代码。

例如:

  • 字符串、浮点数和整数的专用版本可以取代二进制操作(加、减等)。
  • 函数调用也需要较少的开销。
  • 函数调用的堆栈框架现在设计得更有效,需要的内存也更少。
  • 递归调用比早期版本更有效,即使它们没有尾部优化(无论如何,这在Python中是不可能的)。
  • Python运行时所需的基本模块也被更有效地存储和加载。
  • Python解释器本身启动更快。

Python 3.11几乎快1.25倍而不是上一个版本,根据官方Python性能基准测试套件。请注意,速度的增加是一个总的度量。虽然许多对象的运行速度略快或与以前相同,但有些东西的运行速度明显更快。事实上,这些改进的功能是免费的,这仍然是这个版本最大的部分。Python 3.11提高的速度对Python脚本非常有利,无需修改任何代码。

异常的改进

例外是错误处理方法Python在最新版本中经历了重大变化。看看它们吧:

  • 检测异常所需的时间减少了10%。
  • 除非您真的引发异常,否则它们不再对程序产生成本。因此,试/除了Block的默认路径需要更少的内存和更快。
  • 有了新的ExceptionGroup异常类型和除了*语法中,您可以同时引发和管理许多异常。这使得问题的处理更加优雅,允许开发人员一次提出几个错误。
  • 除了异常文本之外,上下文注释还可以添加到异常中。

错误消息的改进

加上更多描述性的回溯是Python 3.11的关键变化之一。对Python 3.10进行了改进,增加了更好和更多的描述性错误。Python 3.11更进一步,改进了对精确错误位置的描述。为了更好地理解,看看这个例子:

下面是一段有语法错误的代码:

defaverage_grade(成绩):
返回Sum(成绩)/ len(成绩)

average_grade ([])

作为对此的响应,Python 3.10显示了以下消息:

返回Sum(成绩)/ len(成绩)
ZeroDivisionError:除0

下面是Python 3.11显示的内容:

返回Sum(成绩)/ len(成绩)
~~~~~~~~~~~~^~~~~~~~~~~~~
ZeroDivisionError:除0

正如您所看到的,改进后的回溯使确定错误的确切位置.在早期版本中,只能查看异常本身和引发异常的行。

类型提示的改进

开发人员现在可以以更简单的方式分析和管理大型代码库使用Python 3.11改进的类型提示功能。Python团队在过去的几个版本中一直在改进这一特性,最新的版本为其增加了活力。

自我类型

以前,Python程序员必须为类方法使用困难且冗长的注释回归自我.但现在,打字。自我使您能够将类方法的返回值注释为自我;——是的,就是这么简单。这些方法的分析工具为您提供了实际的和可预测的结果。

可变泛型

由于可变泛型的存在,您可以拥有包含各种类型的变量。当使用张量类型对象(如Pandas、TensorFlow对象、NumPy数组等)表示多维数组时,这是至关重要的。

3.11更新引入了新的TypeVarTuple,它允许参数具有任意数量的类型,例如可变类型变量,从而启用变进泛型。

字面值字符串类型

在Python 3.11发布之前,类型注释无法显示特定变量必须是字符串字面值。它现在由LiteralString注释。新的注释支持文字字符串以及由其他文字字符串组成的字符串。如果程序员运行shell和SQL命令来增加额外的安全性措施并减轻注入攻击,则可以将此特性用于类型检查。

新的TOML库

新版本支持toml格式的文件tomllib图书馆。它建在tomllib库和编写TOML不支持tomllib

tomllib给我们带来了两个主要功能:

负载():加载从str

负载():从文件中加载字节

以下是其中的一个例子:

进口tomllib

#给出TypeError,必须使用二进制模式
以open('t.toml')为f:
tomllib.load (f)

#正确
张开(' t。Toml ', 'rb')作为f:
tomllib.load (f)

#正确
以open('t.toml')为f:
tomllib.loads (f.read ())

#给出TypeError,不能读取字节串
张开(' t。Toml ', 'rb')作为f:
tomllib.loads (f.read ())

Python 3.11的一些问题

与任何新版本一样,Python 3.11中存在一些问题,这使得立即使用它有点困难。然而,这一切都不应被视为负面言论。Python团队正在免费提供非常有价值的工作,并且需要很长时间才能最终发布一项技术的稳定和完美版本。

考虑到这一点,新版本的Python有一些值得注意的问题:

  • 不兼容包
  • 缺少二进制包
  • 不支持工具链
  • 缺少Conda支持

为什么以及什么时候升级到Python 3.11?

你可能会尽可能地避免升级Python版本,因为它需要工作——对代码进行一些更改,然后进行测试。当您可以无限地使用当前版本时,为什么还要强调兼容性问题和新版本呢?

问题是Python和库都不是无限支持的。迟早有一天,你会失去的访问安全更新和错误修复.因此,您最终将需要升级。如果您使用的是较旧版本的Python,那么迁移可能会很麻烦,因为您经常需要同时处理Python和库中更大的跨版本更改。

因此,一个持续的,正在进行的小升级过程比每隔几年就进行一次大规模升级要安全得多。每当一个新的主要Python版本发布时,在切换之前等待一段时间,这意味着现在,你真的应该使用3.10.进行一系列的升级,从3.8、3.9、3.10开始,如果你落后了,最终是3.11。

如果你真的很想现在就转换,那么等到你的整个工具包和库明确支持Python 3.11时,也就是2022年12月中旬,可能是明智的。那时,除了依赖项可用性和工具链支持外,您还可以访问第一个版本3.11.1。

结论

Python 3.11中是否有任何不同寻常的变化,彻底改变了这种编程语言的格局?不是真的;然而,已经有一些明显的更新使Python占22%平均而言更友好的.只是在这个版本中,我们最喜欢的语言之一通过这些微小而重要的变化变得更好了。

python快乐!


下面这些文章可能也很有趣:

Sarrah Pitaliya

萨拉·皮塔利亚是一位咖啡鉴赏家和健身狂。在工作中,她作为数字营销主管从一线领导数字营销团队Radixweb这是一家软件和网络应用开发公司。她致力于为自己参与的每个项目增加价值,这帮助她建立了一个庞大的数据库,记录了数字营销领域的价值和不价值。她写这篇文章是为了分享她的经验,并对数字作为一个概念的所有细微差别提供洞察。

萨拉·皮塔利亚著

最近的帖子