本月初,Python软件基金会重新启动了Python 3.9的第一个beta版本,该版本计划于10月发布。 随着Beta发行版的发布,Python 3.9的所有主要更改都已设置,这意味着了解下一个Python版本给世界带来的时机已经成熟。
以下是Python 3.9中所有主要新功能的摘要。
到目前为止,Python已经以18个月的节奏进行了开发和发布。 PEP 602提议Python开发团队采用年度发布周期,并且该提议已被接受。
年度发布周期意味着每个版本的功能减少,但是这也意味着对功能测试的反馈速度更快,每个版本的潜在破坏性更改更少,因此有更多的动机激励用户和Linux发行经理更频繁地升级Python。 这也意味着在开发周期后期提出的新功能将不需要花费很长时间就可以发布到新版本中。
新的时间表意味着Python 3.9将于2020年10月发布。Python3.10于2020年5月19日正式开始Alpha预先开发,将在Python 3.9发布时进入Alpha开发阶段,并将于2021年10月发布。相同的模式。
与以前的版本相比,Python的每个修订版都具有性能改进。 Python 3.9进行了两项重大改进,这些改进可提高性能而无需更改现有代码。
第一个改进涉及更多使用Python 3.8中引入的vectorcall
协议 。 通过最小化或消除为调用创建的临时对象, vectorcall
可使许多常用函数调用更快。 在Python 3.9中,几个Python内置组件( range, tuple, set, frozenset, list, dict
内部使用vectorcall
来加快执行速度。
第二大性能增强器是更有效的Python源代码解析。 用于CPython运行时的新解析器并非旨在解决性能问题,而是用于处理原始解析器中的内部不一致问题。 但是,附带的一个重要好处是解析速度更快,尤其是对于大量代码。
Python使操作通用数据类型变得容易,而Python 3.9通过字符串和字典的新功能扩展了这种便利性。 对于字符串,有一些删除前缀和后缀的新方法 ,这些操作长期以来需要大量的手动工作才能完成。 对于词典,现在有联合运算符 ,一个用于将两个词典合并到一个新词典中,另一个用于用另一个词典更新一个词典的内容。
在过去的几个版本中,Python扩展了对类型提示的支持。 这主要是为了使用lint和代码检查器。 CPython中没有在运行时强制使用python类型,也没有计划使python成为静态类型的语言。 但是类型提示是确保大型代码库一致性的强大工具,因此Python代码仍然可以从具有类型提示中受益。
类型提示和类型注释的两个新功能进入了Python 3.9。 其中之一是, 集合内容的类型提示 (例如列表和字典)现在可以在Python中使用。 这意味着您可以例如将列表描述为list[int]
(整数列表),而无需typing
库来完成。
Python的键入机制的第二个附加功能是灵活的函数和变量注释 。 这允许使用带Annotated
类型来描述使用元数据的类型,该元数据可以提前(使用衬棉工具)或在运行时进行检查。 例如, Annotated[int, ctype("char")]
可用于描述一个整数,应将其视为C中的char
类型。默认情况下,Python不会对此类注释做任何操作,但可以由代码短绒。
清理,完善和现代化Python内部是Python开发人员的一项持续举措,Python 3.9在这方面进行了一些更改。
首先是重新设计模块与进口机器交互的方式。 用C编写的Python扩展模块现在可以使用一种新的加载机制 ,使它们在导入时的行为更像常规的Python模块。 Python标准库中的几个模块最近支持此行为: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref
。 新的加载机制不仅允许扩展模块由Python更灵活地处理,而且还启用了诸如高级挂钩行为之类的新功能。
第二个清理计划是针对CPython的稳定的内部ABI,保证可以在Python 3的整个生命周期内持续使用。从历史上看,Python的每个主要版本都与以前的版本不兼容ABI,因此需要为每个新版本重新编译扩展模块。 从现在开始,任何使用稳定ABI的扩展模块都可以在Python版本中使用。 在Python 3.9中,标准库中的以下模块使用稳定的ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib
。
翻译自: https://www.infoworld.com/article/3543885/python-39-whats-new-and-better.html