前几天在众人期待中,Python发布了版本号为3.9.0b3的beta版,这也意味着,Python3.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):

passLL(1) 不能处理左递归。特定的递归语法意味着解析树时可能出现无限循环。Python 的缔造者 Guido van Rossum 在这篇文章[1]中给出了解释。

毫无疑问,这些因素以及更多无法理解的其他问题影响着Python的发展,而新版本的解析器是基于PEG,它将给 Python 开发者提供更大的灵活性,从 Python 3.10开始我们将能够感受到这一点。

到这里 Python 3.9的版本几个重要的特性就讲解完毕,我们已经迫不及待的希望正式版的到来。

python3.9新特性_Python 3.9正式版,新特性提前一睹为快相关推荐

  1. python3.4和3.6的区别_详解Python3.6正式版新特性

    按照Python官网上的计划,Python3.6正式版期望在2016-12-16号发布,也就是这周五.从去年的5月份开始,Python3.6版本就已经动手开发了,期间也断断续续的发布了4个Alpha版 ...

  2. WeX5 V3.6 正式版核心特性

    本文转载自:http://www.oschina.net/news/78056/wex5-3-6 WeX5 V3.6 正式版核心特性: 一.打包特性增强: 1- 提供多WebView选择,引入腾讯X5 ...

  3. 一加3t氢android8_一加3t氢android8_一加氢OS推出Android 8.0正式版 新系统流畅到飞起...

    原标题:一加氢OS推出Android 8.0正式版 新系统流畅到飞起 一加手机早在去年万圣节就在一加3和3T上开始公测基于Android 8.0的氢系统了,但奈何当时由于国内大部分软件都不兼容而导致迟 ...

  4. 一加3t氢android8_一加氢OS推出Android 8.0正式版 新系统流畅到飞起

    原标题:一加氢OS推出Android 8.0正式版 新系统流畅到飞起 一加手机早在去年万圣节就在一加3和3T上开始公测基于Android 8.0的氢系统了,但奈何当时由于国内大部分软件都不兼容而导致迟 ...

  5. linux三大桌面,三大特性!Linux 7桌面正式版初体验(组图)

    三大特性!Linux 7桌面正式版初体验(组图) 作者: 51cto CNETNews.com.cn 2010-03-26 01:05:14 经过一段时间的测试,中科红旗Linux终于发布了正式版,并 ...

  6. win10正式版新功能介绍

    win10正式版新功能 一:拨动.滑动及缩放 在win10系统中拥有完整触控功能呢祝您尽情发挥电脑潜力,自然.直接的受控操作方式让您尽享快意流畅的运作步调. 二:网络世界.无所不在 在win10系统中 ...

  7. 邮件多面手!Foxmail 6.5正式版新体验

    邮件多面手!Foxmail 6.5正式版新体验 Foxmail是国内一款着名的电子邮件客户端软件,自从被腾讯收购后依然实行免费政策,并且每一次更新几乎都会给用户们带来新的体贴功能,Foxmail 6. ...

  8. python3.9出了吗_Python 3.9 正式版要来了,会有哪些新特性?

    Python 正在一直马不停蹄地更新,历时数月,我们迎来了又一个 Beta 版 -- 3.9.0b3,Python 3.9 正式版已经不远了,一起来看它带来了哪些值得开发者关注的重要新特性! 以下为译 ...

  9. python3 循环写入一对多键值对_Python 3.9 正式版要来了,会有哪些新特性?

    Python 正在一直马不停蹄地更新,历时数月,我们迎来了又一个 Beta 版 -- 3.9.0b3,Python 3.9 正式版已经不远了,一起来看它带来了哪些值得开发者关注的重要新特性! 作者 | ...

最新文章

  1. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm
  2. 7.1 TensorFlow笔记(基础篇):加载数据之预加载数据与填充数据
  3. LightSwitch中的权限
  4. 七值逻辑与基本数据类型
  5. 做任务一定要看测试用例
  6. android删除键监听,「React Native」Android返回键监听
  7. 机器学习实战 | 数据探索(缺失值处理)
  8. Bzoj1034 [ZJOI2008]泡泡堂BNB
  9. 百度网盘海外版上传下载不限速;一季度北京平均月薪达11187元;苹果 CEO 增加新候选人|极客头条...
  10. OenLayers 事件注册
  11. 元宇宙NFT商城系统|艺术数字藏品平台源码部署
  12. 开源,多用户分销微信商城源码分享
  13. 爬虫项目实操五、用Scrapy爬取当当图书榜单
  14. 华御上网行为管理FAQ
  15. Zynga重返公有云 是否大势所趋
  16. 如何用科学的方法,保障数据准确性
  17. 《今日简史》--重新认识自己:人类心智的奥秘
  18. JavaScript_原型链继承
  19. 设计开发必须收藏的资源网站
  20. SEOer应该学着诊断自己的网站

热门文章

  1. boost::bind with ros topic,ros中subscribe用boost::bind绑定多个参数
  2. 计算机系统集成 行业标准,行业标准信息服务平台
  3. linux vnc端口映射,linux服务器配置docker+vnc,随时访问远程桌面
  4. 无人车前轮转向分辨率校准
  5. python构建知识库_Python学习知识库
  6. SpringSecurity框架【详解】
  7. 【Spring第二篇】IOC:控制反转
  8. LCP 01. 猜数字
  9. 显示隐藏-display(HTML、CSS)
  10. *Algs4-2.4.23Multiway的堆(未解决)