下列功能中python不具备的是_Python 3.9版本新增4大新功能,迫不及待想尝鲜的看过来!...

全文共1671字,预计学习时长7分钟

18d8bc3eb13533fab1dfb07addb60c1940345be0.jpeg?token=463d456862f0af8b21b7723d347c3384图源:unsplash

又要到Python新版本发布的时刻了,测试版已然推出,完整发行版将在不久之后与我们见面。这无疑令技术爱好者们十分兴奋,摩拳擦掌地等待上手一探究竟。

新版本中有许多值得期待的新功能,本文就先带大家尝尝鲜。

1.字典合并

这是笔者最喜欢的新功能之一,它拥有优美的语法。如果有两个字典a和b需要合并,可以使用合并运算符:

f2deb48f8c5494eea64df533539011f899257e1d.jpeg?token=aa58a85b955d1255f30c76d67bfd09eb图源:unsplash

合并(merge)操作符|:

a = {1: 'a', 2: 'b', 3: 'c'}

b = {4: 'd', 5: 'e'}c = a | b

print(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 |= b

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

如果字典共享一个公共键(common key),则使用第二个字典中的键值对:

a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}

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

使用迭代更新字典:|=运算符还有一个不错的地方,即能够通过可迭代对象(例如列表或生成器)使用新的键值对更新字典。

a = {'a': 'one', 'b': 'two'}

b = ((i, i**2) for i in range(3))a |= b

print(a)[Out]: {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}

如果尝试使用标准合并运算符|进行相同的操作,将产生一个类型错误(TypeError),因为它仅允许字典(dict)类型之间的合并操作。

e7cd7b899e510fb33cfa0dd6aa563993d0430c7f.jpeg?token=158f91ad58f043ace4a53e04f6f6b82f

2.字符串方法

这个功能看起来“其貌不扬”,但实则非常实用。新版本添加了两个用于删除前缀和后缀的新字符串方法:

“ Hello world” .removeprefix(“ He”)

[Out]:“ llo world”

Hello world” .removesuffix(“ ld”)

[Out]:“ Hello wor”

3.新分析器

这是一个不可见的更改,但有可能成为Python未来发展中最重要的更改之一。

Python当前使用的主要是基于LL(1)的语法,而该语法又可以由LL(1)分析器进行解析,该分析器使用单一的前向标记符从上到下,从左到右地解析代码。

54fbb2fb43166d22a21aca753646f8f19152d24b.jpeg?token=985b2f5690db02782755cb00bfb34273图源:unsplash

笔者几乎不知道它是如何工作的,但是可以指出一些由于Python使用这种方法导致的问题:

· Python包含非LL(1)语法;当前语法的某些部分使用了工作区,从而造成不必要的复杂性。

· LL(1)在Python语法中造成限制(没有可用的工作区)。此问题突出说明了以下代码根本无法使用当前分析器实现(引发语法错误):

with (open("a_really_long_foo") as foo,

open("a_really_long_bar")as bar):

pass

· LL(1)在分析器中以左递归中断。意味着含义特定的递归语法可能导致解析树中的无限循环。

所有这些因素(还有很多根本无法理解的因素)严重限制了Python语言的发展。而基于PEG的新分析器将为Python开发人员提供更大的灵活性,人们会从Python 3.10开始注意到这一点。

4.类型提示

Python是动态类型的,这意味着无需在代码中指定数据类型。这一特性本身没有问题,但有时可能会造成混淆。

从Python 3.5开始,用户可以指定类型,但是操作起来非常麻烦。此次更新改变了这一点,举个例子:

f2deb48f8c5494eec85bc1165d9011f899257e34.jpeg?token=21bb5867f5c039ed61c37478afb382d7无类型提示(左)vs3.9中带类型提示(右)

add_int函数的目的是为数值自身添加相同的数值。但是编辑器并不知道这一点,因此完全可以使用+将两个字符串加在一起,不会发出警告。现在可以将期望的输入类型指定为int。使用此功能,编辑器可以立即了解问题。

用户还可以非常详细地了解所包含的类型,例如:

8718367adab44aedcd38425cc1797607a08bfb85.jpeg?token=fc42595afb18748d687590b81468d57c

类型提示可以在任何地方使用,新语法让代码看起来更加整洁:

d52a2834349b033bd2a8a3c064abc7d5d539bd70.jpeg?token=bf33838d5db4dd005fa3c6445963e4d2

将sum_dict的参数指定为dict,将返回值指定为整数型。在定义test时,也要确定其类型。

2934349b033b5bb5c4e2fd2546b6243fb700bca4.jpeg?token=6b0e3c611618c77a575a62fadddcad01图源:unsplash

这些新功能确实让人迫不及待,等不及的同学可以先去试试最新的Beta版本-3.9.0b3。(https://www.python.org/downloads/release/python-390b3/)

4a36acaf2edda3cc919fb10e5fafc807213f9276.jpeg?token=7ea73af47f0f1b4a4de7b4ffc2a31c22

留言点赞关注

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值