文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 3.9新特性有哪些

2024-04-02 19:55

关注

本篇内容主要讲解“Python 3.9新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python 3.9新特性有哪些”吧!

字典合并

一个非常优雅的特性,当我们想将两个字典进行合并时,只需要使用操作符“|”:

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'}

这里需要注意的是,如果两个字典都包含相同的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。

TypeError:unsupported opprand type(s) for |:'dict' and 'generator'

类型提示

Python作为动态类型的编程语言,这意味着在使用中我们并不需要给变量指定数据类型。然而虽然可以这样做,但是这让我们在维护代码时常常感到困惑,并且灵活性也成了缺点。

在3.5版本后,虽然我们可以指定数据类型了,但是使用起来仍然非常麻烦。这次新版本就对此进行了更新:没有类型提示vs有类型提示

上图中我们想通过add_int函数将两个相同的数字想加到一起,然而编译器并没有很好的理解我们的意图,由于两个字符串也可以使用+进行连接,所以这里并没有给出警告。

现在当我们可以指定函数的参数类型时,在参数类型为int时,编译器就能够立即识别上述的问题。

新增字符串函数

虽然字符串函数没有其他新特性那么强大,但字符串作为开发中使用最频繁的数据类型,这里也需要提一下他的改变。新版本中添加了移除前缀和后缀的两个字符串函数:

"Hello world".removeprefix("He")

Hello world".removesuffix("ld")

输出结果:

[Out]: "llo world"

[Out]: "Hello wor"

新的解析器

作为一个普通的开发者,语法解析器的变化可能不易被察觉,但它的变化有可能成为Python演变中的一个重要转折点。

我们所知,目前Python主要是用的是一种基于LL(1)的语法,这种语法可以通过LL(1)解析器进行解析,该解析器从上到下、从左到右地解析代码,只需要从词法分析器中取出一个 token 就可以正确地解析下去。

然而LL(1) 存在的一些问题:

Python 中包含非 LL(1) 语法,正因如此,当前语法采用了一些曲线救国的办法,带来了很多不必要的复杂性。

LL(1) 给 Python 语法造成了很多限制。某个相关话题提到了下面代码无法用当前的解析器进行解析(会造成 SyntaxError)。

with (open("a_really_long_foo") as foo,

open("a_really_long_bar") as bar):

到此,相信大家对“Python 3.9新特性有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯