python 3.9 发布计划_从旧到新的转折点:Python3.9有哪些新功能?

Python3.9带来了LL(1)解析器的重大改变,引入了PEG解析器,为语法扩展铺平道路。同时,开发周期缩短至12个月,将更频繁地发布新版本。新功能包括增强类型提示、字符串操作方法的改进以及字典合并运算符。这些变化预示着Python未来将更加灵活且功能丰富。
摘要由CSDN通过智能技术生成

全文共1925字,预计学习时长5分钟

8256c6a813a524f9d6a49dcf67cb59e3.png图源:unsplash

很显然,Python3.9是标志这一著名编程语言从旧路线演化到新路径的转折点。本文就将带大家探索其新功能,了解Python的未来走向。

6a9f5dc2dc35c3d9c5665551dd245b6e.png

Python 的新方向

此次更新有两个重大变化,虽然直观上不受影响,但要开始注意了:作为一种语言,Python的发展将略有不同。简而言之,可总结为:

· Python对解析器的限制

· 版本更小,迭代更频繁

LL(1) 和 PEG

大约30年前,吉多·范·罗森写了pgen,这是为 Python 编写的第一批代码之一,至今仍被用作Python的解析器。Pgen的编写基于LL(1)的语法变体,这标志着解析器若要全方位读取代码,只需先行令牌。这也基本上说明Python的开发是有限的,因为:

· 先行令牌限制了语法规则的表现力。

· 由于当前Python已包含非LL(1)语法,解析器迂回方案繁杂,使过程复杂化。

· 即使有这些解决方案,情况也很受限。规则可以改变但不能违反。

· 使用LL(1)特定的左递归语法可能会使解析树分析无限循环,从而导致栈溢出。

基于LL(1)的解析器的这些属性限制了Python可能实现的价值,而Python 3.9打破了这些限制,这要归功于闪亮新星PEG解析器,PEP617有所概述。我们不会很快感受到这一点。在Python 3.10出来之前,新解析器不会更改;但之后,Python将会冲破LL(1)的限制,大显身手。

开发周期

7ba038cb75f36c7d522b9c9b3eba8d9f.pngPython的发布计划将从18 个月缩减到 12 个月

在 3.9 版本发布之前,Python原本的发布计划是间隔18个月一版的,而现在,它进入了为期12个月的发布时间表[PEP 602]。从前新版本每18个月才亮相一次,现在一年一换。这也意味着Python:

· 不再一次性上线大量新功能。

· 变化更循序渐进,但由于新功能的发布,修复将会更快完成。

· 发布日期更规律,新Python将在每年10月面世。

所以从本质上讲,本文主要关注12个月周期内较小的增量变化,而不是每18个月发生的较大变化。与此同时,预计开发速度将保持不变。

6a9f5dc2dc35c3d9c5665551dd245b6e.png

新功能

类型提示

早在2008年,Python 3就引入了函数注释——类型提示的前身。它虽然不是特别强大,但是一个重要开端。

efdd0ed5e10579d3fb7af176049731f1.pngPython类型提示的实时状态是多次添加和修改注释和键入的变化累积。

此后又增加了其他功能。如今,3.9版本将各功能与整洁的新语法结合起来,以取得Python类型提示的最新发展。

现在,我们可以轻松地指定变量的预期数据类型。如果写了一些没有意义的东西(比如把字符串传递给整数),编辑器就会提醒有错误产生。虽然不会指出错误,但在使用复杂代码库时,它可帮了大忙。

在Python中,用“+”连接两个字符串是绝对有效的。因此,“add_int”函数接收两个字符串不会引发任何错误。

63da6fb0c380760a8a2bb14b384e199d.png无类型提示(左);Python3.9带类型提示(右)。

有了新的类型提示功能,只需在函数定义的参数中添加 :int,编辑器就会立即识别错误。

b1bcbce67b1fb89ba5ca405d905668fb.png指定预期的输入和输出数据类型。

也可以使用->type 语法来确定函数的值输出类型。

b5e9b423d6acfb90cdb5221cf300fe4b.png可将不同类型结合在一起来创建更复杂的注释。

不要局限于简单的预定义类型!

字符串方法

虽然不像其他变化那样酷,但此方法被使用频率极高。有两种用于删除字符串前缀和后缀的新方法:

"foo bar".removeprefix("fo")[Out]: 'o bar'

"foo bar".removesuffix("ar")[Out]: 'foo b'

合并字典

有两个新运算符来合并字典。首先是合并运算符 |:

a = {1: 'a', 2: 'b', 3: 'c'}b = {4: 'd', 5: 'e'}c = a | bprint(c)[Out]: {1: 'a', 2: 'b', 3: 'c', 4:'d', 5: 'e'}

然后更新运算符就地合并:

a = {1: 'a', 2: 'b', 3: 'c'}b = {4: 'd', 5: 'e'}a |= bprint(a)[Out]: {1: 'a', 2: 'b', 3: 'c', 4:'d', 5: 'e'}

fb4243d3a8da6f7e6bd285d981b3b65d.png图源:unsplash

作为一种编程语言,Python未来发展无限,见证该语言如何随着新的发布计划和解析器而发展将一定会是很有趣的!

2481a68edd96b3afaa757666107123f6.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值