去年国庆假期,Python 社区发布了 3.9 版本的第一个 stable release 。相比于 3.8,Python 3.9 新特性众多,但不少特性与大多数 Python“使用者”(而非 CPython 的贡献者或使用 C 接口编写扩展的开发者)关系不大。本文将站在 Python “使用者”的角度,简单介绍新特性中很可能会与各位的日常开发产生关系的几个。

字典“并集”运算符

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

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

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

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

类型提示的改善

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

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

此外,typing 库加入了新的类型 Annotated,通过使用 Annotated,开发者可以为内置的或自定义的类型附加更多的信息。一种可能的使用场景:Annotated 中的类型信息供 IDE 或 代码审查工具静态地检查变量类型,而附加的信息则可以在运行时产生更丰富的作用——PEP 593 中展示了一个类似的例子。

装饰器语法更加灵活

旧版本的 Python 对装饰器的语法有所限制,Python 3.9 将这一限制放宽——任意“表达式”均可用在装饰器中。如果读者对“任意表达式”这一概念感到模糊,可以参考 if 或 while 语句,在 Python 3.9 中,任意可以用在 if 或 while 测试部分的语句都可以成为装饰器而不会产生语法错误。如下图所示,甚至匿名函数也可以直接作为装饰器(虽然图中的做法毫无意义,在此仅仅为了演示语法特性),在 Python 3.8 或之前的版本中,这样的写法会引发 SyntaxError 。

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

classmethod 支持包装其他描述器

Python3.9 中的 classmethod 函数增加了对包装其他描述器( descriptor )的支持。如下图所示,现在我们可以结合 classmethod 和 property 轻松创造出一个类的属性(在 3.8 及之前的版本中,开发者需要手工实现一个描述器以支持类似的功能)。

新增模块、函数、方法

包括且不限于:

  • 标准库中添加了时区数据库模块 zoneinfo

  • 内置的字符串类型加入了新的掐头去尾方法 removeprefix 和 removesuffix

  • math 模块中新增了多个数学运算函数

参考资料

1.Python.org

2.Python Enhancement Proposals (PEPs)

3.Python Documentation


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

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

Python 3.9 新特性速览 - Ricequant米筐量化相关推荐

  1. 不停歇的Java即将发布JDK16新特性速览及从菜鸟到架构师[图]

    一.不停歇的Java即将发布JDK16新特性速览 当开发者深陷Java8版本之际,这边下一版本Java16有了最新的消息,与Java15一样,作为短期版本,Oracle仅提供6个月的支持. 根据发布计 ...

  2. golang1.16新特性速览

    目录 语言內建的资源嵌入支持 支持arm64 go modules的新特性 GO111MODULE现在默认为on go build不再更改mod相关文件 go install的变化 新的GOVCS环境 ...

  3. Java 15 即将到来,新特性速览!

    编译 | 苏宓 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 按照 Oracle 六个月一更新的周期来看,JDK 15 即将于今年 9 月 15 日发布.据了解,目 ...

  4. 不停歇的 Java 即将发布 JDK 16,新特性速览!

    当开发者深陷 Java 8 版本之际,这边下一版本 Java 16 有了最新的消息,与 Java 15 一样,作为短期版本,Oracle 仅提供 6 个月的支持. 根据发布计划,JDK 16 将在 1 ...

  5. JDK 16 即将发布,迎来重大改变,新特性速览!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 来源: ...

  6. 16速 java_不停歇的 Java 即将发布 JDK 16,新特性速览!

    之前在 JDK 15 中预览的密封类和接口限制其余类和接口能够扩展或实现它们.该计划的目标包括,容许类或接口的做者控制负责实现它的代码,提供比访问修饰符更声明性的方式来限制超类的使用,以及经过提供模式 ...

  7. 任务调度系统 xxl-job,V1.4.1 新特性速览

    分布式任务调度系统 xxl-job新版本V1.4.1更新内容: 1.项目成功推送maven中央仓库, 中央仓库地址以及依赖如下: <!-- http://repo1.maven.org/mave ...

  8. JDK16 新特性速览,你还能追上 Java 的更新速度吗?

    点赞关注,不会迷路!    你还能追上 Java 的更新速度吗? 当开发者深陷 Java 8 版本之际,这边下一版本 Java 16 有了最新的消息,与 Java 15 一样,作为短期版本,Oracl ...

  9. JDK 16 即将发布,新特性速览!

    往期热门文章: 1.<往期精选优秀博文都在这里了!> 2.老大,Service层需要接口吗? 3.那些总是写"烂代码"的同学,强烈推荐你用这款IDEA插件! 4.烂大街 ...

  10. python海龟代码大全_海龟交易系统的Python完全版 | RiceQuant米筐量化社区 交易策略论坛...

    @zhaoyang-chen 海龟的Python版出炉. 为方便对比,这里把java.python两种语言代码同时贴出,回测时间及初始资金均使用页面默认的20140104-20150104,10000 ...

最新文章

  1. 华为鸿蒙系统概念图,华为P50Pro概念图:没有麒麟芯片,鸿蒙系统和7镜头也可以很豪横...
  2. Java中使用Jedis操作Redis
  3. 新思科技助力IBM将AI计算性能提升1000倍
  4. 02-初识CoreData
  5. leetcode 417. Pacific Atlantic Water Flow | 417. 太平洋大西洋水流问题(DFS,经典“感染”思路)
  6. 2场直播丨MySQL 数据库最常见的 6 类故障的排除方法、2020数据技术嘉年华·金融峰会暨数据库大咖讲坛(第4期)...
  7. jenkins自动部署配置
  8. 《Python cookbook》笔记二
  9. excel导出_学习笔记—— 前端导出excel
  10. 深度学习2.0-7.tensorflow的高阶操作之数据统计
  11. 金格套红正文字体格式的修改
  12. 不小心删除电脑系统所有字体的解决方法
  13. 1.从第一道面试题谈起
  14. 从零开始Tableau | 10.表计算-基础
  15. 国医中药,人参神秘而又独特的地位
  16. strchr、strstr函数
  17. NCBI Pathogen Detection project简介
  18. 钱多多软件制作第五天
  19. java 数组 取部分_在Java中只获取一部分数组?
  20. 《管理的实践》66条读书笔记

热门文章

  1. r5驱动 索尼exmor_继往开来索尼Exmor RS CMOS 4系传感器来了
  2. Ghostexp.exe
  3. 计算机软件著作权登记
  4. 蓝牙诊断工具_蓝牙故障诊断和使用指南
  5. vmware fusion8 序列号
  6. C++11/14的新特性——更简洁
  7. 通过BIOS设置启用CPU虚拟化解决VMware虚拟机不支持X86_64位linux操作系统安装问题
  8. linux3d游戏,笔记本linux系统能玩3d游戏吗?
  9. 社会工程学主要学习内容及书籍推荐
  10. 【工具篇】使用OpenCV播放视频并截取图片