机器之心报道
编辑:陈萍、杜伟
想要体验新功能的小伙伴赶紧去试试新版本吧!
终于,Python3.11正式版发布了!
年1月1日,Python官方结束了对Python2的维护,这意味着Python2已完全退休,进入了Python3时代。打从进入3版本以来,Python官方已经发布了众多修改分支,现在来到了最新的版本Python3.11。
其实研究界有个不公开的秘密,那就是Python运行速度并不快但容易上手,因此使用人数超级多,在众多最受欢迎语言榜单中Python多次位列第一。很多开发者都期待这门语言的性能有所提升,还有人畅想Python4会不会在某个不经意的时刻到来,有这种想法的人可以放一放了,Python之父VanRossum都说了,Python4.0可能不会来了。
VanRossum曾表示:「我和Python核心开发团队的成员对Python4.0没什么想法,提不起兴趣,估计至少会一直编号到3.33。Python的加速是渐进式的,3.11版本会有新的速度提升,预计会比3.10快得多。」
正如VanRossum所说,根据官方资料显示最新发布的Python3.11比Python3.10快10-60%,对用户更友好。这一版本历经17个月的开发,现在公开可用。
Python3.11的具体改进主要表现在:更详实的ErrorTracebacks、更快的代码执行、更好的异步任务语法、改进类型变量、支持TOML配置解析以及一些其他非常酷的功能(包括快速启动、Zero-Cost异常处理、异常组等)。
Python指导委员会成员和核心开发者、Python3.10/3.11发布管理者PabloGalindoSalgado表示,为了使3.11成为最好的Python版本,我们付出了很多努力。
Python3.11新特性
ErrorTracebacks
Python这门编程语言对初学者非常友好,它具有易于理解的语法和强大的数据结构。但对于刚刚接触Python的人来说却存在一个难题,即如何解释当Python遇到错误时显示的traceback。
Python3.11将Decorativeannotation添加到tracebacks中,以帮助用户更快地解释错误消息。想要获得这种功能,可以将以下代码添加到inverse.py文件中。
举例来说,你可以使用inverse()来计算一个数的倒数。因为0没有倒数,所以在运行下列代码时会抛出一个错误。
注意嵌入在traceback中的^和~符号,它们指向导致错误的代码。与此前的tracebacks一样,你应该从底层开始,然后逐步向上。这种操作对发现错误非常有用,但如果代码过于复杂,带注释的tracebacks会更好。
更快的代码执行
Python以速度慢著称,例如在Python中,常规循环比C中的类似循环慢几个数量级。
Python官方正在着手改进这一缺陷。年秋,MarkShannon提出了关于Python的几个性能改进。这个提议被称为香农计划(ShannonPlan),他们希望通过几个版本的更新将Python的速度提高5倍。不久之后微软正式加入该计划,该公司正在支持包括MarkShannon、GuidovanRossum在内的开发人员,致力于「FasterCPython」项目的研究。
「FasterCPython」项目中的一个重要提案是PEP,在此基础上,Python3.11有了许多改进。
PEP描述了一种「specializingadaptiveinterpreter」。主要思想是通过优化经常执行的操作来加快代码运行速度,这类似于JIT(just-in-time)编译。只是它不影响编译,相反,Python的字节码是动态调整或可更改的。
研究人员在字节码生成中添加了一个名为「quickening」的新步骤,从而可以在运行时优化指令,并将它们替换为adaptive指令。
一旦函数被调用了一定次数,quickening指令就会启动。在CPython3.11中,八次调用之后就会启动quickening。你可以通过调用dis()并设置adaptive参数来观察解释器如何适应字节码。
在基准测试中,CPython3.11比CPython3.10平均快25%。FasterCPython项目是一个正在进行的项目,已经有几个优化计划在年10月与Python3.12一起发布。你可以在GitHub上