目录

字典“并集”运算符

类型提示的改善

装饰器语法更加灵活

classmethod 支持包装其他描述器

新增模块、函数、方法

参考资料


字典“并集”运算符

“并集”运算符顾名思义就是给两个字典取并,并产生新的字典对象。

熟悉 collections 标准库的开发者听到这一特性想必很容易联想到 ChainMap,两者的区别是“并集”运算符会直接产生新的对象,而 ChainMap 产生的是与输入的对象相关联的视图——视图对象或输入对象的变化都会直接对对方产生影响。

字典“并集”运算符及其相对应的原地运算符的效果如图:

也许有同学会质疑“并集”运算符的意义,毕竟使用如下的写法也能相对简洁地合并字典:

就笔者的理解(且不提上述三种写法有多少开发者能够想到),“并集”运算符的优势在于不会丢失参与合并字典的类型信息,且对字典键的类型没有要求;

此外,经过简单测试,“并集”运算符在性能上也更有优势。

类型提示的改善

Python 3.9 为内置的以及标准库中的集合类型提供了用于类型提示中的泛型的支持。如:

这一支持解决了一直以来 Python 代码中会出现两种 list(list 和 typing.List)类型的尴尬情况。需要注意的是,泛型化的内置类型仍然支持实例化,但不能被用于 isinstance 和 issubclass 判断,这一设计应该 Python 社区是结合了代码表意性和性能作出的综合考量:

此外,typing 库加入了新的类型 Annotated,通过使用 Annotated,开发者可以为内置的或自定义的类型附加更多的信息。

一种可能的使用场景:Annotated 中的类型信息供 IDE 或 代码审查工具静态地检查变量类型,而附加的信息则可以在运行时产生更丰富的作用——PEP 593 中展示了一个类似的例子。

查看PEP 593:

https://www.python.org/dev/peps/pep-0593/#combining-runtime-and-static-uses-of-annotations

装饰器语法更加灵活

旧版本的 Python 对装饰器的语法有所限制,Python 3.9 将这一限制放宽——任意“表达式”均可用在装饰器中。

如果读者对“任意表达式”这一概念感到模糊,可以参考 if 或 while 语句,在 Python 3.9 中,任意可以用在 if 或 while 测试部分的语句都可以成为装饰器而不会产生语法错误。

如下图所示,甚至匿名函数也可以直接作为装饰器(虽然图中的做法毫无意义,在此仅仅为了演示语法特性),在 Python 3.8 或之前的版本中,这样的写法会引发 SyntaxError。

PEP-614 为我们展示了一个更有实用价值的例子 —— 在编写 PyQt5 代码时为按钮列表中的每个元素分别注册事件。

查看PEP 614:

https://www.python.org/dev/peps/pep-0614/#motivation

classmethod 支持包装其他描述器

Python3.9 中的 classmethod 函数增加了对包装其他描述器(descriptor)的支持。

如下图所示,现在我们可以结合 classmethod 和 property 轻松创造出一个类的属性(在 3.8 及之前的版本中,开发者需要手工实现一个描述器以支持类似的功能)。

新增模块、函数、方法

包括且不限于:

  • 标准库中添加了时区数据库模块 zoneinfo
  • 内置的字符串类型加入了新的掐头去尾方法 removeprefix 和 removesuffix
  • math 模块中新增了多个数学运算函数

参考资料

1.Python.org

2.Python Enhancement Proposals (PEPs)

3.Python Documentation

4. Ricequant

上文中介绍的特性仅仅是 Python 3.9 更新中的冰山一角,想要更全面地了解 Python 3.9,您可以:

  • 直接访问文档

    https://docs.python.org/3.9/whatsnew/3.9.html#what-s-new-in-python-3-9

  • 下载 Python3.9 的安装器或源码(anaconda 频道中尚未提供 Python 3.9)自行体验。

    https://www.python.org/downloads/release/python-390/

python 3.9 新特性 简介相关推荐

  1. Oracle11g新特性简介

    转 Oracle 11g 新特性简介https://blog.csdn.net/tianlesoftware/article/details/5134819  Oracle 11g于2007年7月11 ...

  2. JDK8新特性简介、Lambda表达式、Stream流常用api介绍

    JDK8新特性简介.Lambda表达式.Stream流常用api介绍 接口 Java1.8前接口中是不允许有普通方法的,在Java1.8后允许接口中有普通方法,只需要加上default关键字即可: J ...

  3. ECMAScript 2021(ES12)新特性简介

    简介 ES12是ECMA协会在2021年6月发行的一个版本,因为是ECMAScript的第十二个版本,所以也称为ES12. ES12发行到现在已经有一个月了,那么ES12有些什么新特性和不一样的地方呢 ...

  4. ECMAScript 2019(ES10)新特性简介

    简介 ES10是ECMA协会在2019年6月发行的一个版本,因为是ECMAScript的第十个版本,所以也称为ES10. 今天我们讲解一下ES10的新特性. ES10引入了2大特性和4个小的特性,我们 ...

  5. ECMAScript 2016(ES7)新特性简介

    简介 自从ES6(ECMAScript 2015)在2015年发布以来,ECMAScript以每年一个版本的速度持续向前发展.到现在已经是ECMAScript 2020了. 每个版本都有一些新的特性, ...

  6. ECMAScript 6新特性简介

    文章目录 简介 ECMAScript和JavaScript的关系 let和const 解构赋值 数组的扩展 函数的扩展 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript ...

  7. python 3.9特性,开发者应该知道的Python 3.9新特性

    导读:Python 3.9来了,有哪些新特性值得学,值得用? Python 2.9(5.10.2020)已经发布了一段时间,最后一个Alpha版(3.9.0a5)近期发布了测试版.开发者应该看新版有哪 ...

  8. python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数

    这是Python3.8新特性的第二篇,第一篇介绍了赋值表达式,这篇文章花几分钟了解什么是仅位置参数(Positional-Only Arguments) 插播一条:我自己是一名从事了多年开发的Pyth ...

  9. Python 3.6新特性(部分)

    Python 3.6.0于2016年12月23日正式发布,除了本文提到的这一部分比较重要的新特性之外,还有很多标准库也新增了部分功能,等有时间再慢慢整理. 1.内置字典对象dict进行了重新设计,可以 ...

最新文章

  1. C#获取存储过程返回值和输出参数值的方法
  2. 008_Queue消息模式发送映射消息
  3. 为docker设置国内镜像【转】
  4. Python变量和对象类型速记手册
  5. 自考总结--2020年10月份
  6. Office365邮箱Imap迁移步骤
  7. 网宿科技与国汽智控达成战略合作 共推智能网联汽车技术落地
  8. java doprivileged_【转】关于AccessController.doPrivileged
  9. USACO Section 2.1 Sorting a Three-Valued Sequence 解题报告
  10. vs关于_CRT_SECURE_NO_WARNINGS警告说明
  11. 计算机英语邓广慧,地方高校理工类大学生专业英语教学改革探讨
  12. 深入理解SD卡:协议
  13. 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)
  14. Starrocks集群部署
  15. vue项目网站ico图标设置
  16. Win10任务栏全透明化(TranslucentTB)
  17. Django 图书-英雄
  18. c语言能够输出形如金字塔型的数 如1 22 333 4444 55555
  19. Java毕设项目电力公司员工安全培训系统(java+VUE+Mybatis+Maven+Mysql)
  20. c语言怎么用scanf输入字母,c语言输入字符串(c语言怎么用scanf输入字符串)

热门文章

  1. mysql create at_create_at update_at
  2. 扩展屏幕没有连接,但程序窗口还在扩展屏幕上,在看不到这个屏幕的情况下,把程序窗口拉回来的方法
  3. NR 5G 运营发布
  4. python requests.packages.urllib3问题记录
  5. 购物车的实现(jsp的session+Java的Map的结合)
  6. 高性能的MySQL(5)索引策略
  7. Testing AJAX Applications with VSTS 2008
  8. css的content属性
  9. 如何用纯 CSS 创作一个方块旋转动画
  10. 云视频通信在建筑施工企业的应用